gpt4 book ai didi

java - 在 Java 中建立持久 TCP 连接的示例代码

转载 作者:可可西里 更新时间:2023-11-01 02:57:38 26 4
gpt4 key购买 nike

我想创建一个示例 TCP 客户端-服务器对。客户端将从控制台获取输入字符串并将其发送到服务器,服务器将打印请求字符串并返回一些字符串。我不想在事务完成后关闭连接,而是使用我想继续发送请求并从服务器获取响应的相同连接。

我编写了以下客户端-服务器代码,第一个事务正确发生,但是当我尝试发送第二个请求时,服务器没有收到任何东西,客户端挂起。我试图用谷歌搜索解决方案,但找不到任何有用的信息。请帮忙。

客户端代码

public class Client {

public static void main( String[] args ) throws UnknownHostException, IOException {
Socket clientSocket = new Socket( "localhost", 81 );
DataOutputStream out = new DataOutputStream( clientSocket.getOutputStream() );
BufferedReader in =
new BufferedReader( new InputStreamReader( clientSocket.getInputStream() ) );
System.out.println( "connected to server" );

while ( true ) {
System.out.println( "enter data to send" );
Scanner sc = new Scanner( System.in );
String msg = sc.nextLine();
out.writeBytes( msg + "\n" );
System.out.println( "response from server : "+in.readLine() );

}

}
}

服务器代码

public class Server {

public static void main(String args[]) throws IOException{
ServerSocket ss = new ServerSocket(81);
System.out.println( "server started" );
while(true){
System.out.println( "waiting for client" );
Socket s = ss.accept();
System.out.println( "connected to client" );
BufferedReader in = new BufferedReader( new InputStreamReader( s.getInputStream() ) );
DataOutputStream out = new DataOutputStream( s.getOutputStream() );
out.flush();
System.out.println( "recieved: "+ in.readLine() );
out.writeBytes( "200\n" );
}
}
}

最佳答案

当您的服务器启动时,它会创建一个绑定(bind)在端口 81 上的服务器套接字并进入无限循环。在此循环中,您从“接受”状态开始,在此状态下您监听要建立的连接并接受它。接受后,您等待来自客户端的一行输入,将其打印到 System.out,并以“200”响应进行响应。您遇到的问题是,在您响应后,循环“重置”,您开始监听新连接。

最简单的解决方案是持续检查服务器中的传入数据。

public class Server {

public static void main(String args[]) throws IOException{
ServerSocket ss = new ServerSocket(81);
while(true){
Socket s = ss.accept();
BufferedReader in = new BufferedReader( new InputStreamReader( s.getInputStream() ) );
DataOutputStream out = new DataOutputStream( s.getOutputStream() );
while (true) {
System.out.println( "recieved: "+ in.readLine() );
out.writeBytes( "200\n" );
out.flush();
}
}
}
}

虽然这适用于单个客户端,但这会阻止您在监听数据时建立新连接。您可能希望为每个连接创建一个新线程来处理每个不同套接字连接的读/写。

关于java - 在 Java 中建立持久 TCP 连接的示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48239369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com