繁体   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