如何在 Java 中按需创建套接字?

How would I create Sockets on demand in Java?

我正在 Java 中制作一个客户端到客户端的聊天应用程序,我想知道如何按需创建套接字。更具体地说,我想知道是否有任何方法可以检查是否有传入连接。使用它,我可以同时使用两种方法 运行 与线程一起使用,一种方法等待连接,而另一种方法处理服务器(发送消息)。这是一个很好的策略还是我应该使用不同的技术?

如果我使用一个套接字数组并在每个连接中添加一个新的套接字会怎么样? 然而,当稍后引用套接字时,数组会导致问题吗?
if 有一个 && 什么都没有,因为我想在那里添加一个方法来帮助我检查是否有传入连接。

import java.util.*;
import java.io.*;
import java.net.*;
public class Server {
public static ServerSocket SSock;
public static Socket Sock;
public static DataInputStream dis;
public static DataOutputStream dos;
public static PrintWriter pw;
public static BufferedReader br;
public static Socket[] wow;
public int counter = 0;
public int port = 2500;
public Scanner input = new Scanner(System.in);  

public static void main(String[] args) throws IOException{
    SSock = new ServerSocket();
    Sock = SSock.accept();
    dis = new DataInputStream(Sock.getInputStream());
    dos = new DataOutputStream(Sock.getOutputStream());
    pw = new PrintWriter(dos, true);
    br = new BufferedReader(new InputStreamReader(dis));
    Server s = new Server();
    Thread t1 = new Thread(s.new connection());
    Thread t2 = new Thread(s.new server());
    t1.start();
    t2.start();
}

public class connection implements Runnable {
    public void run() {
        try {
            Thread.sleep(200);
        } catch (Exception e) {
            //NOTHING!! MWAH MWAH MWAH
            //Sigh. I'll add something here later...
        }

        if (  && Sock.isConnected()) {

        }

    }
}

public class server implements Runnable{
    public void run() {

    }
}

}

我认为您误解了 TCP 套接字的概念。当您尝试启动与远程服务器的连接时,它不会“创建需求”;服务器在你发起请求之前监听套接字,否则你只会得到一个“连接被拒绝”的错误。

在 Java 中,ServerSocket.accept() 为您处理所有这些:它侦听传入连接,一旦建立连接,它 returns 您 Socket 用于此特定连接上的所有进一步通信。

我发现我必须制作一个 returns 套接字的方法。

public Socket s (Socket so) {  //When I add a Socket to an arraylist, I call this method
    //edit properties
    return so; 
}