【发布时间】: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