Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次需要向服务器发送或接收内容时,是否需要重新创建一个新套接字?_Java_Sockets_Network Programming - Fatal编程技术网

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打开有什么意义?另一方面,您可能需要重复请求数据(或者服务器可能会定期发送更新),在这种情况下,最好保持
套接字
打开。在链接的示例中,目的是保持示例简单,而不是高效