我的服务器套接字有问题。我创建了一个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))
获取要发送的下一个内容,并且它正在阻止。所以,我无法接收来自客户端的内容并将其打印出来
我怎么安排呢?
Merci,eo
答案 0 :(得分:0)
尝试在Java中对System.in
进行非阻塞读取是徒劳的。没有可移植的方法,所以Java不支持它。
即使您创建了一个单独的线程并在那里执行阻塞读取,您也会遇到该线程不可中断的问题。请参阅:Java: how to abort a thread reading from System.in
基本上,您需要使用特定于平台的库(JNI)(例如,用于Linux的JCurses),或者使用GUI。
编辑添加:您可以做的是将套接字读取移动到其他线程,因为它是可中断的。