java - tcp客户端和服务器不互相接收数据

标签 java sockets networking

我正在尝试从客户端套接字向服务器发送数据,但是,当发送数据时,服务器仍在等待数据,在此之后客户端套接字然后等待来自服务器的数据。有两个套接字互相等待。有人可以解释一下出了什么问题吗:

客户:

package ssd8ex3_tcp_client;

import java.io.*;
import java.net.*;

public class Ssd8Ex3_TCP_Client {

    private static final int SERVICE_PORT = 2000;

    public static void main(String[] args) {

        String hostname = "localhost";

        int counter = 0;
        while (counter < 1000) {
            try {
                Socket socket = new Socket(hostname, SERVICE_PORT);
                socket.setSoTimeout(50000);
                PrintStream pstream = new PrintStream( socket.getOutputStream() );
                pstream.print(counter);
                pstream.flush();

                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String s = reader.readLine();
                System.out.println("Results :" + s);
                socket.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

            counter++;
        }

    }
}

服务器:

package ssd8ex3_tcp_server;

import java.io.*;
import java.net.*;


public class Ssd8Ex3_TCP_Server {

    public static final int SERVICE_PORT = 2000;

    public static void main(String[] args) {
        try {
            ServerSocket server_socket = new ServerSocket(SERVICE_PORT);

            System.out.println("Server started");

            for(;;){
                Socket nextClient = server_socket.accept();
                System.out.println("Received request from " + nextClient.getInetAddress() + ":" + nextClient.getPort());

                BufferedReader reader = new BufferedReader(new InputStreamReader(nextClient.getInputStream()));
                String s = reader.readLine();
                OutputStreamWriter out = new OutputStreamWriter(nextClient.getOutputStream());
                PrintWriter pout = new PrintWriter(out);

                pout.print(s);

                out.flush();

                nextClient.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

最佳答案

您的服务器使用readLine,它将等待完整的行。您的客户端使用 print ,它不会附加行尾标记。所以服务器正在等待行尾。

在客户端中使用println(并对返回交换执行相同的操作),事情应该会“解开”。

关于java - tcp客户端和服务器不互相接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154571/

相关文章:

java - 排列、递归

c++ - 在 C 中使用原始套接字确定 HTTP 版本

swift - 如何使用组合将异步加速度计更新发送到服务器

c - 如何通过HTTP使用RTSP?

ios - 应用商店因同样的问题拒绝了我的应用 2 次

java - 有没有办法在 fragment 中实现 setOnDateListener 并将其发送数据到另一个 fragment ?

java - 惰性组合 Observables

java - 无法以编程方式连接到蓝牙设备

linux - 以太网校验和是否通过 AF_PACKET 公开?

java - 在 Java 构建路径上找不到 "c:url"(org.apache.taglibs.standard.tag.rt.core.UrlTag) 的标记处理程序类