[英]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.