最近我在用JAVA编写一个UDP即时通信程序。假设有两个机器,一个作为服务器,一个作为客房端。在服务器上接收数据时,是放在while(true) {}这样一个死循环里的。
但是,发送信息用datagramsocket.send(datagrampacket),但是接收信息用的是死循环啊,怎么会有机会执行datagramsocket.send(datagrampacket)呢?这个问题困扰了我N久了,头都痛了?请知道的朋友给我一点意见吧,给分!

解决方案 »

  1. 个人认为其实你不用比while(true){}迷惑,其实Datagramsocket.receive(datagrampacket);此方法在接收到数据报前一直阻塞,简单认为他一直在等待数据,所以在他未接受到数据时,while(true){}是不会循环!你也可以调用DatagramSocket.setTimeOut();来设定的接受数据的超时时间!
      

  2. while(true){}是指的是服务器一直在监听端口。
    datagramsocket.send(datagrampacket)是这个SCOKET向外面发送数据。
    两个不冲突。就相当于 一个正在看门的人,可以在看门期间可以做其他的事。:-)
      

  3.   
      使用多线程就可以解决了吗?
      
      我现在还有一个疑问:就是我的这个UDP聊天程序,雏型已经做好了(未用多线程),但是只能实现客户端发一句,服务端回一句,不能够客户端连续发信息或服务端连续发信息!  请问这个用多线程能解决吗?如果不能的话,那用什么方法呢?
      


  4.   使用多线程就可以解决了吗?
     
      我现在还有一个疑问:就是我的这个UDP聊天程序,雏型已经做好了(未用多线程),但是只能实现客户端发一句,服务端回一句,不能够客户端连续发信息或服务端连续发信息!请问这个用多线程能解决吗?如果不能的话,那用什么方法呢?=========================================================================================
    这个问题就是因为你没有使用多线程,如果你启用两个线程,一个负责接收,一个负责发送,那么就不会要求接收一条然后才能发送一条的限制了。
      

  5. 个人认为其实你不用比while(true){}迷惑,其实Datagramsocket.receive(datagrampacket);此方法在接收到数据报前一直阻塞,简单认为他一直在等待数据,所以在他未接受到数据时,while(true){}是不会循环!你也可以调用DatagramSocket.setTimeOut();来设定的接受数据的超时时间!
      

  6. implements Runnableextends Thread
      

  7. 用一个线程是完全可以解决这个问题的,我就做过!但是我还是建议你用两个线程!还有,你可以对收的语句进行分析,如果收到的是你事先规定好的String 如:byebye,就用break,跳出循环!这就OK了
      

类似问题 »