[英]Java socket server blocking
我的服务器套接字存在一些问题。 我创建一个DatagramSocket在服务器和客户端之间聊天。
public static void main (String[] args) throws IOException {
byte[] send = new byte[1024];
byte[] receive = new byte[1024];
BufferedReader entree;
DatagramSocket serverSocket = null;
InetAddress ip;
InetAddress ipDest;
int port;
try {
serverSocket = new DatagramSocket(8888);
} catch (SocketException e) {
e.printStackTrace();
}
while (true) {
DatagramPacket recu = new DatagramPacket(receive, receive.length);
serverSocket.receive(recu);
String sentence = new String(recu.getData());
ipDest = recu.getAddress();
port = recu.getPort();
System.out.println("Reçu:"+sentence);
entree = new BufferedReader(new InputStreamReader(System.in));
String chaine = entree.readLine();
send = chaine.getBytes();
DatagramPacket dp = new DatagramPacket(send, send.length, ipDest, port);
serverSocket.send(dp);
send = new byte[1024];
receive = new byte[1024];
}
但是我使用new BufferedReader(new InputStreamReader(System.in))
获取要发送的下一个东西,并且它正在阻塞。 因此,我无法接收来自客户端的消息并将其打印出来。
我该如何安排?
默西欧
尝试在Java中对System.in
进行非阻塞读取是徒劳的。 没有可移植的方法来执行此操作,因此Java不支持它。
即使您创建了一个单独的线程并在那里进行阻塞读取,您仍然会遇到该线程不可中断的问题。 请参阅: Java:如何中止从System.in中读取线程
基本上,您需要使用平台特定的库(JNI)(例如,针对Linux的JCurses ),或使用GUI。
编辑添加:您可以做的是将套接字读取移动到另一个线程,因为这是可中断的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.