A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangqing_tt 中级黑马   /  2015-4-19 15:06  /  461 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看着毕老师的视频写了一个聊天程序,但是有一点疑问,希望能有人给解答,非常感谢!
发送端数据封装的时候,怎么才能写才能是动态的接收端端口号码,不用每当接收端端口号码改一次,发送端就得改一次程序?

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. import java.net.SocketException;

  7. /**
  8. * 聊天程序
  9. *
  10. * @author Administrator
  11. *
  12. */

  13. public class UdpChatDemo {
  14.         public static void main(String[] args) {
  15.                
  16.                 DatagramSocket sendSocket = null;
  17.                 DatagramSocket recoSocket = null;
  18.                
  19.                 try {
  20.                        
  21.                         sendSocket = new DatagramSocket();
  22.                         recoSocket = new DatagramSocket(10000);
  23.                        
  24.                 } catch (SocketException e) {
  25.                         e.printStackTrace();
  26.                 }
  27.                
  28.                
  29.                 new Thread(new Send(sendSocket)).start();
  30.                 new Thread(new Reco(recoSocket)).start();
  31.         }
  32. }

  33. //发送端
  34. class Send implements Runnable {

  35.         private DatagramSocket ds;

  36.         public Send(DatagramSocket ds) {
  37.                 this.ds = ds;
  38.         }

  39.         public void run(){
  40.                 try{
  41.                         //键盘输入流
  42.                         BufferedReader bfw = new BufferedReader(new InputStreamReader(System.in));
  43.                        
  44.                         String line = null;
  45.                        
  46.                         while((line = bfw.readLine()) != null){
  47.                                 //数组缓冲区
  48.                                 byte[] buf = line.getBytes();
  49.                                 //发送端数据封装包
  50.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(""),10000);
  51.                                 //发送数据
  52.                                 ds.send(dp);
  53.                                
  54.                                 //如果发送“baibai”,则退出
  55.                                 if("baibai".equals(line))
  56.                                         break;
  57.                         }
  58.                 }catch(Exception e){
  59.                         e.printStackTrace();
  60.                 }
  61.         }
  62. }

  63. //接收端
  64. class Reco implements Runnable {

  65.         private DatagramSocket ds;

  66.         public Reco(DatagramSocket ds) {
  67.                 this.ds = ds;
  68.         }

  69.         public void run(){
  70.                 try{
  71.                         while(true){
  72.                                 byte[] buf = new byte[1024];
  73.                                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  74.                                
  75.                                 ds.receive(dp);
  76.                                
  77.                                 //解析数据包
  78.                                 String ip = dp.getAddress().getHostAddress();
  79.                                 String data = new String(dp.getData(),0,dp.getLength());
  80.                                 System.out.println(ip + "::" + data);
  81.                                 //如果对方发送baibai,则证明对方离开聊天室了
  82.                                 if("baibai".equals(data))
  83.                                 {
  84.                                         System.out.println(ip + "离开了聊天室!");
  85.                                         break;
  86.                                 }
  87.                         }

  88.                 }catch(Exception e){
  89.                         e.printStackTrace();
  90.                 }
  91.         }
  92. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马