簡體   English   中英

Java套接字服務器阻止

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM