为什么使用java套接字创建的服务器不会打印从客户端发送的数据(如果客户端终止则会显示)?

问题描述 投票:0回答:1

在下面的示例中,我创建了一个服务器,它只打印任何客户端正在写入套接字。但我没有得到输出作为客户输入数据。如果客户端终止,那么我可以看到在outputstream中插入的所有数据客户端。我从客户端的控制台获取输入,然后将该数据写入服务器套接字。

服务器代码:

   public class server {
public static void main(String[] args) throws Exception {
    System.out.println("waiting");
    ServerSocket s = new ServerSocket(9999);
    Socket stemp = s.accept();
    System.out.println("read comp");
    InputStream is = stemp.getInputStream();
    InputStreamReader ir = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(ir);

    while(true)
    {
        String str = br.readLine();
        if(str!=null)
        {
            System.out.println(str);
        }
        if(str.contains("exit"))
        {
            break;
        }
    }
    stemp.close();
    ir.close();
    is.close();
    br.close();
}
}

客户代码:

public class client {
    public static void main(String[] args) throws Exception {
        String ip ="127.0.0.1";
        int port = 9999;
        Socket s1 = new Socket(ip, port);
        OutputStream os = s1.getOutputStream();
        OutputStreamWriter ow = new OutputStreamWriter(os);

        BufferedWriter pw = new BufferedWriter(ow);
        pw.write("I am ready");
        Scanner s = new Scanner(System.in);
        String str = s.nextLine();
        System.out.println(str);
        while(!str.contains("exit"))
        {
            pw.write(str);
            pw.flush();
            str = s.nextLine();
        }
        pw.close();
        os.close();
        ow.close();
        s1.close();
    }
}
java sockets
1个回答
2
投票

server,使用br.readLine();,等待终点线。

在客户端,你必须在pw.write( str + '\n' );发送eol。

© www.soinside.com 2019 - 2024. All rights reserved.