-2

因此,我编写了一个简单的 Socket 程序,将消息从客户端发送到服务器程序,并想知道进行测试的正确程序是什么?我的客户端和服务器机器都在 Ubuntu 12.04 上运行,我正在远程连接到它们。

对于我的客户端代码,当我实例化客户端套接字 (testSocket) 时,我是使用其 IP 地址和端口号还是服务器 IP 地址和端口号?

这是客户端的代码:

public static void main(String[] args) throws UnknownHostException, IOException 
{
    Socket testSocket = null;
    DataOutputStream os = null;
    DataInputStream is = null;

    try
    {
        testSocket = new Socket("192.168.0.104", 5932);
        os = new DataOutputStream(testSocket.getOutputStream());
        is = new DataInputStream(testSocket.getInputStream());
    }
    catch (UnknownHostException e)
    {
        System.err.println("Couldn't find Host");
    }
    catch (IOException e)
    {
        System.err.println("Couldn't get I/O connection");
    }

    if (testSocket != null && os != null && is != null)
    {
        try
        {
            os.writeBytes("Hello Server!\n");

            os.close();
            is.close();
            testSocket.close();

        }

        catch (UnknownHostException e)
        {
            System.err.println("Host not found");
        }
        catch (IOException e)
        {
            System.err.println("I/O Error");
        }
    }

}

这是服务器的代码:

public static void main(String[] args) 
{
    String line = new String() ;


    try
    {
       ServerSocket echoServer = new ServerSocket(5932);

       Socket clientSocket = echoServer.accept();

      DataInputStream  is = new DataInputStream(clientSocket.getInputStream());
      PrintStream os = new PrintStream(clientSocket.getOutputStream());

           while (true) 
           {
             line = is.readLine();
             os.println(line); 
           }
    }
    catch (IOException e)
    {
        System.out.println(e.getMessage());
    }

}

我是 Sockets 的新手,不确定我应该看到什么。我在终端很好地编译了两个程序,但不确定我应该先运行哪个程序还是需要同时启动它们?

谢谢

4

2 回答 2

1

您的服务器正在无限循环中运行。避免这种情况。您必须重新启动计算机。

while (true) 
           {
             line = is.readLine();
             os.println(line); 
           }

尝试

while (!line.equals("Hello Server!")) 
           {
             line = is.readLine();
             os.println(line); 
           }

首先运行服务器。echoServer.accept(); 等待连接。当它获得第一个连接时,

于 2012-08-30T18:42:03.127 回答
0

http://docs.oracle.com/javase/tutorial/networking/sockets/这是一个关于如何使用套接字的简短 java 教程,您还可以学习如何制作一个一次接受多个连接的服务器。本教程说明您总是需要先启动服务器,这是合乎逻辑的。您应该使用线程来管理连接,然后关闭它们,以便有效地使用资源

于 2013-03-31T17:58:39.583 回答