繁体   English   中英

从客户端套接字读取多个数据

[英]Read multiple data from client socket

客户端代码,用于从文件读取数据并将其发送到服务器

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)

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

注意您的读取循环不正确。 它应该是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM