Java 每次需要向服务器发送或接收内容时,是否需要重新创建一个新套接字?
在下面的示例中,在Java 每次需要向服务器发送或接收内容时,是否需要重新创建一个新套接字?,java,sockets,network-programming,Java,Sockets,Network Programming,在下面的示例中,在while循环中 在客户机类中,他不断地重新创建套接字对象。这种方法正确吗?我不能重复使用1个插座吗 package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TestClientSocke
while
循环中
在客户机类中,他不断地重新创建套接字对象。这种方法正确吗?我不能重复使用1个插座吗
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TestClientSocket {
public static void main(String args[]) throws IOException {
final String host = "localhost";
final int portNumber = 81;
System.out.println("Creating socket to '" + host + "' on port " + portNumber);
while (true) {
Socket socket = new Socket(host, portNumber); //THIS HERE ISN'T GOING TO BE SLOW ??
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
System.out.println("server says:" + br.readLine());
BufferedReader userInputBR = new BufferedReader(new InputStreamReader(System.in));
String userInput = userInputBR.readLine();
out.println(userInput);
System.out.println("server says:" + br.readLine());
if ("exit".equalsIgnoreCase(userInput)) {
socket.close();
break;
}
}
}
}
请将相关代码摘录纳入您的问题中好吗?@AndreyTyukin它位于我发布的链接中。对于每个连接到
ServerSocket
的客户端,您必须创建一个新的Socket
,以方便通信。根据您的解决方案,您可以维护套接字
(即不要关闭它),通常在单独的thread@MadProgrammer很酷,谢谢,我已经添加了代码。那么,哪种方法更有效?@TrtTrt在建立Socket
连接时会产生开销,您使用的连接将取决于您试图解决的解决方案的上下文,例如,您可能只需要从服务器发出一个数据请求,那么保持Socket打开有什么意义?另一方面,您可能需要重复请求数据(或者服务器可能会定期发送更新),在这种情况下,最好保持套接字
打开。在链接的示例中,目的是保持示例简单,而不是高效