本帖最后由 唐长智 于 2013-1-25 08:58 编辑
基本和老毕视频里的代码一样,但是在客户端输入886之后,程序应该停止的。但是,实际控制台却并没有停止,就像假死一样,输入什么都没用,只能Ctrl+C强行结束,这是由于多线程的原因么?
请大神帮答。- import java.io.*;
- import java.net.*;
- class Send implements Runnable{
- private DatagramSocket ds;
- public Send(DatagramSocket ds){
- this.ds = ds;
- }
-
- public void run(){
- try{
- BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
-
- String line = null;
-
- while((line = bufr.readLine())!= null){
- byte[] buf = line.getBytes();
-
- DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.53"),10003);
-
- ds.send(dp);
-
- if("886".equals(line)){
- break;
- }
- }
- }
- catch(Exception e){
- throw new RuntimeException("读取失败");
- }
- }
- }
- class Rece implements Runnable{
- private DatagramSocket ds;
-
- public Rece(DatagramSocket ds){
- this.ds = ds;
- }
-
- public void run(){
- try{
- while(true){
- byte[] buf = new byte[1024];
- DatagramPacket dp = new DatagramPacket(buf,buf.length);
-
- ds.receive(dp);
- String ip = dp.getAddress().getHostAddress();
-
- String data = new String(dp.getData(),0,dp.getLength());
-
- System.out.println(ip + "...." + data);
- }
- }
- catch(Exception e){
- throw new RuntimeException("接收失败");
- }
- }
- }
- class ChatDemo{
- public static void main(String args[])throws Exception{
- DatagramSocket sendSocket = new DatagramSocket();
- DatagramSocket receSocket = new DatagramSocket(10003);
-
- new Thread(new Send(sendSocket)).start();
- new Thread(new Rece(receSocket)).start();
- }
- }
复制代码 |