黑马程序员技术交流社区

标题: Socket通信问题 [打印本页]

作者: 莫道荣    时间: 2013-3-20 23:57
标题: Socket通信问题
本帖最后由 莫道荣 于 2013-3-21 13:38 编辑
  1. import java.net.*;
  2. import java.io.*;
  3. class Send implements Runnable
  4. {
  5.         private DatagramSocket ds;
  6.         public Send(DatagramSocket ds)
  7.         {
  8.                 this.ds=ds;
  9.         }
  10.         public void run()
  11.         {
  12.                 try
  13.                 {
  14.                         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  15.                         String line;
  16.                         while ((line=br.readLine())!=null)
  17.                         {
  18.                                 if ("886".equals(line))
  19.                                         break;
  20.                                 byte[] buf=line.getBytes();
  21.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10003);
  22.                                 ds.send(dp);
  23.                         }
  24.                         ds.close();
  25.                 }
  26.                 catch (Exception e)
  27.                 {
  28.                         throw new RuntimeException("发送失败");
  29.                 }
  30.                
  31.         }
  32. }

  33. class Rece implements Runnable
  34. {
  35.         private DatagramSocket ds;
  36.         public Rece(DatagramSocket ds)
  37.         {
  38.                 this.ds=ds;
  39.         }
  40.         public void run()
  41.         {
  42.                 try
  43.                 {
  44.                         byte [] buf=new byte[1024];
  45.                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
  46.                 while (true)
  47.                 {
  48.                         ds.receive(dp);
  49.                         String res=new String(buf,0,dp.getLength());
  50.                         System.out.println(res);
  51.                 }
  52.                 }
  53.                 catch (Exception e)
  54.                 {
  55.                         throw new RuntimeException("接收失败");
  56.                 }
  57.         }
  58. }
  59. class UdpClint2
  60. {
  61.         public static void main(String[] args) throws Exception
  62.         {
  63.                 new Thread(new Send(new DatagramSocket())).start();
  64.             new Thread(new Send(new DatagramSocket(10001))).start();
  65.         }
  66. }



  67. import java.net.*;
  68. import java.io.*;
  69. class Send implements Runnable
  70. {
  71.         private DatagramSocket ds;
  72.         public Send(DatagramSocket ds)
  73.         {
  74.                 this.ds=ds;
  75.         }
  76.         public void run()
  77.         {
  78.                 try
  79.                 {
  80.                         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  81.                         String line;
  82.                         while ((line=br.readLine())!=null)
  83.                         {
  84.                                 if ("exit".equals(line))
  85.                                         break;
  86.                                 byte[] buf=line.getBytes();
  87.                                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10001);
  88.                                 ds.send(dp);
  89.                         }
  90.                         ds.close();
  91.                 }
  92.                 catch (Exception e)
  93.                 {
  94.                         throw new RuntimeException("发送失败");
  95.                 }
  96.                
  97.         }
  98. }

  99. class Rece implements Runnable
  100. {
  101.         private DatagramSocket ds;
  102.         public Rece(DatagramSocket ds)
  103.         {
  104.                 this.ds=ds;
  105.         }
  106.         public void run()
  107.         {
  108.                 try
  109.                 {
  110.                         byte [] buf=new byte[1024];
  111.                         DatagramPacket dp=new DatagramPacket(buf,buf.length);
  112.                         while (true)
  113.                         {
  114.                                 String ip=dp.getAddress().getHostAddress();
  115.                                 ds.receive(dp);
  116.                                 System.out.println(ip+"::"+new String(buf,0,dp.getLength()));
  117.                         }
  118.                 }
  119.                 catch (Exception e)
  120.                 {
  121.                         throw new RuntimeException("接收失败");
  122.                 }
  123.         }
  124. }
  125. class UdpClint
  126. {
  127.         public static void main(String[] args) throws Exception
  128.         {
  129.                 new Thread(new Send(new DatagramSocket())).start();
  130.             new Thread(new Send(new DatagramSocket(10003))).start();
  131.         }
  132. }



复制代码
为什么两个控制台不能互相通信呢????



作者: 李尧    时间: 2013-3-21 00:23
楼主,你好像在mian函数里面new的都是send哎...没有receive有木有?
  new Thread(new Send(new DatagramSocket())).start();
  new Thread(new Send(new DatagramSocket(10003))).start();
作者: VOIDMAIN    时间: 2013-3-21 00:30
程序好乱,目测你出现了两个端口号,10001和10003,一个连接通常只需要指定一个端口号就行了,发送端可以让系统自动分配端口号,检查一下吧。
作者: 黄玉昆    时间: 2013-3-21 10:33
最好把你的代码加上注释,这样自己以后再看的时候也不用全部看一遍,减少阅读时间,而且对别人也是一种很清晰的阐述。谢谢
作者: 莫道荣    时间: 2013-3-21 13:44
VOIDMAIN 发表于 2013-3-21 00:30
程序好乱,目测你出现了两个端口号,10001和10003,一个连接通常只需要指定一个端口号就行了,发送端可以让 ...

我两个端口号分别是给两个receive设的监听端口,我是想让两个窗口同时既能够发送又能够接收
作者: 莫道荣    时间: 2013-3-21 13:45
黄玉昆 发表于 2013-3-21 10:33
最好把你的代码加上注释,这样自己以后再看的时候也不用全部看一遍,减少阅读时间,而且对别人也是一种很清 ...

嗯嗯,这个坏习惯得好好改改,谢谢提醒




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2