Socket不接受字符串

时间:2016-05-06 15:18:26

标签: java sockets networking serversocket

这是我的代码:

public class EchoServer {

    ServerSocket ss;
    Socket s;
    DataInputStream din;
    DataOutputStream dout;

    public EchoServer() 
    {
        try
        {
            System.out.println("server started");
            //ss = new ServerSocket(0);
            //System.out.println("listening on port: " + ss.getLocalPort());
            ss = new ServerSocket(49731);
            s = ss.accept();
            System.out.println(s);
            System.out.println("connected");
            din = new DataInputStream(s.getInputStream());
            dout = new DataOutputStream(s.getOutputStream());
            Server_chat();
            ss.close();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        new EchoServer();
    }

    public void Server_chat() throws IOException {

        String str;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in ));
        do
        {
            System.out.println("enter a string");
            str = br.readLine();
            System.out.println("str " + din.readUTF());
            dout.flush();            
        }
        while(!str.equals("stop"));
    }
}

我通过端口号验证了49731端口。 0早些时候得到了这个端口。

当我在Netbeans上运行上面的代码时,输​​出显示"服务器已启动"然后它继续运行,即使它应该显示我提供的连接和其余输入。

1 个答案:

答案 0 :(得分:0)

  

然后它继续运行,即使它应该显示连接和   我提供的其余信息。

为什么要继续打印“连接”?

s=ss.accept();
  

在这一行中,您是:侦听与此套接字建立的连接并接受它。该   方法阻塞,直到建立连接。

accept方法将等待连接到他的客户端。因此,您需要提供连接到服务器的客户端。否则他会永远等待!

有关如何在java中使用套接字的一些示例,请参阅herehere

有关accept()阅读here

的详情