【问题标题】:Read multiple data from client socket从客户端套接字读取多个数据
【发布时间】:2017-05-10 20:39:58
【问题描述】:

从文件读取数据并发送到服务器的客户端代码

public class Step2Client {
    public static void main( String args[ ] ) throws Exception
    {
        String ip="localhost";
        int port=9999;

        Socket s=new Socket(ip,port);
        String line="";
        Scanner scanner=new Scanner(System.in);
        OutputStreamWriter os=new OutputStreamWriter(s.getOutputStream());
        PrintWriter out=new PrintWriter(os);
        FileReader fileReader =new FileReader("input.txt");

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while((line = bufferedReader.readLine()) != null) {
            out.println(line);
            System.out.print(line);
        }
    }
}

客户端逐行发送打印数据的服务器代码:

public class Step2Server {
    public static void main(String args[]) throws Exception
    {
        ServerSocket ss=new ServerSocket(9999);
        Socket s=ss.accept();
        StringBuilder stringBuilder=new StringBuilder();
        InputStreamReader inputStream=new InputStreamReader(s.getInputStream());
        BufferedReader br=new BufferedReader(inputStream);
        String line = null;
        do {
            line = br.readLine ();
            stringBuilder.append(line);
        } while (line != null);
        System.out.print(stringBuilder.toString());
    }
}

但是有以下错误

Exception in thread "main" java.net.SocketException: Connection reset
at Step2Server.main(Step2Server.java:20)

【问题讨论】:

  • 写入后不要忘记刷新输出流,在客户端完成后关闭输出流和套接字。服务端的 ServerSocket 和 Socket 也应该关闭。
  • @fireandfuel 在关闭之前刷新是多余的,就像在关闭其流之一后关闭套接字一样。他只需要关闭PrintWriter

标签: java sockets tcp java-io


【解决方案1】:

您的客户端没有关闭套接字,因此当它退出时操作系统正在重置它。它必须在 Windows 上运行。您应该在到达输入文件末尾后调用out.close()

NB 您的读取循环不正确。应该是:

while ((line = br.readLine()) != null) {
    stringBuilder.append(line);
}

目前您正在将最终的null 附加到StringBuilder

【讨论】:

    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多