【问题标题】:How would I create Sockets on demand in Java?如何在 Java 中按需创建套接字?
【发布时间】:2016-02-11 16:31:55
【问题描述】:

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

如果我使用一个 Socket 数组并为每个连接添加一个新的 Socket 会怎样? 但是,当稍后引用 Sockets 时,该数组会导致问题吗?
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() {

    }
}

}

【问题讨论】:

  • 我建议您使用ServerSocket.accept() 我建议您查看有关如何使用它的教程(或一般使用 Java 联网)
  • @PeterLawrey 我有第一个使用该方法的套接字。我应该如何继续使用代码的按需部分?稍后我会上传我的代码。
  • 如果你需要不止一个,我建议你使用循环。
  • @Adit Kirtani:这个问题对你很有用:stackoverflow.com/questions/33087890/…
  • 这些数据成员都不应该是静态的,其中一些是在错误的类中声明的。 DataInput/OutputStreams 在这里毫无意义,睡眠和isConnected() 测试也是如此。永远不要忽略异常。您需要学习 Java 教程的自定义网络部分。太宽泛了。

标签: java multithreading sockets serversocket


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我发现我必须创建一个返回套接字的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多