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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NO? 中级黑马   /  2014-4-9 10:08  /  882 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package jichu;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. import java.net.SocketException;
  9. import java.net.UnknownHostException;

  10. public class Tests {
  11.         public static void main(String[] args) {
  12.                 new Thread(new Runnable() {
  13.                         public void run() {
  14.                                 new Rec().recive();

  15.                         }
  16.                 }).start();
  17.                 new Thread(new Runnable() {
  18.                         public void run() {
  19.                                 new Send().send();

  20.                         }
  21.                 }).start();
  22.         }
  23. }

  24. class Send {
  25.         public static void send() {
  26.                 DatagramSocket dSocket = null;
  27.                 BufferedReader bReader = new BufferedReader(new InputStreamReader(
  28.                                 System.in));
  29.                 while (true) {
  30.                         try {
  31.                                 dSocket = new DatagramSocket();
  32.                         } catch (SocketException e) {
  33.                                 e.printStackTrace();
  34.                         }
  35.                         String string = null;
  36.                         DatagramPacket dPacket = null;
  37.                         try {
  38.                                 string = bReader.readLine();
  39.                         } catch (IOException e) {
  40.                                 e.printStackTrace();
  41.                         }

  42.                         byte[] buf = string.getBytes();
  43.                         try {
  44.                                 dPacket = new DatagramPacket(buf, 0, buf.length,
  45.                                                 InetAddress.getLocalHost(), 10002);
  46.                         } catch (UnknownHostException e) {
  47.                                 e.printStackTrace();
  48.                         }
  49.                         try {
  50.                                 dSocket.send(dPacket);
  51.                         } catch (IOException e) {
  52.                                 e.printStackTrace();
  53.                         }
  54.                         if (string.equals("over")) {
  55.                                 break;
  56.                         }
  57.                 }
  58.                 dSocket.close();
  59.                 try {
  60.                         bReader.close();
  61.                 } catch (IOException e) {
  62.                         e.printStackTrace();
  63.                 }
  64.         }
  65. }

  66. class Rec {

  67.         public static void recive() {
  68.                 String string = null;
  69.                 DatagramSocket dSocket = null;
  70.                 try {
  71.                         dSocket = new DatagramSocket(10002);
  72.                 } catch (SocketException e1) {
  73.                         e1.printStackTrace();
  74.                 }
  75.                 DatagramPacket dPacket = null;
  76.                 while (true) {

  77.                         byte[] buf = new byte[1024];
  78.                         dPacket = new DatagramPacket(buf, 0, buf.length);
  79.                         try {
  80.                                 dSocket.receive(dPacket);
  81.                         } catch (IOException e) {
  82.                                 e.printStackTrace();
  83.                         }
  84.                         byte[] by = dPacket.getData();
  85.                         string = new String(by, 0, by.length);
  86.                         System.out.println(string);
  87.                         if (string.equals("over")) {
  88.                                 break;
  89.                         }
  90.                 }
  91.                 dSocket.close();
  92.         }
  93. }
复制代码

请各位大侠看看。。。。帮帮忙。谢谢

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

5 个回复

倒序浏览
你在接收端中设置的缓冲区:byte[] buf = new byte[1024];  
调用byte[] by = dPacket.getData(); 读取的数据也是1024字节,所以下边string = new String(by, 0, by.length);的string后边有很空字符,可以在比较之前调用下string.trim()函数。

评分

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

查看全部评分

回复 使用道具 举报
tiuwing 发表于 2014-4-9 22:01
你在接收端中设置的缓冲区:byte[] buf = new byte[1024];  
调用byte[] by = dPacket.getData(); 读取的数 ...

谢谢。可是咱么说的不是一码事
回复 使用道具 举报
eclipse?你看看是不是这种情况:演示的时候没display吧?我记得刚开始演示的时候就是跑到receive端输入,然后即使标记也停止不了 后来找了半天,结果是没切换窗口!。!
回复 使用道具 举报
  1. //package jichu;

  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. import java.net.SocketException;
  9. import java.net.UnknownHostException;

  10. class Tests {
  11.         public static void main(String[] args) {
  12.                 new Thread(new Runnable() {
  13.                         public void run() {
  14.                                 new Rec().recive();

  15.                         }
  16.                 }).start();
  17.                 new Thread(new Runnable() {
  18.                         public void run() {
  19.                                 new Send().send();

  20.                         }
  21.                 }).start();
  22.         }
  23. }

  24. class Send {
  25.         public static void send() {
  26.                 DatagramSocket dSocket = null;
  27.                 BufferedReader bReader = new BufferedReader(new InputStreamReader(
  28.                                 System.in));
  29.                 while (true) {
  30.                         try {
  31.                                 dSocket = new DatagramSocket();
  32.                         } catch (SocketException e) {
  33.                                 e.printStackTrace();
  34.                         }
  35.                         String string = null;
  36.                         DatagramPacket dPacket = null;
  37.                         try {
  38.                                 string = bReader.readLine();
  39.                         } catch (IOException e) {
  40.                                 e.printStackTrace();
  41.                         }

  42.                         byte[] buf = string.getBytes();
  43.                         try {
  44.                                 dPacket = new DatagramPacket(buf, 0, buf.length,
  45.                                                 InetAddress.getLocalHost(), 10002);
  46.                         } catch (UnknownHostException e) {
  47.                                 e.printStackTrace();
  48.                         }
  49.                         try {
  50.                                 dSocket.send(dPacket);
  51.                         } catch (IOException e) {
  52.                                 e.printStackTrace();
  53.                         }
  54.                         if (string.equals("over")) {
  55.                                 break;
  56.                         }
  57.                 }
  58.                 dSocket.close();
  59.                 try {
  60.                         bReader.close();
  61.                 } catch (IOException e) {
  62.                         e.printStackTrace();
  63.                 }
  64.         }
  65. }

  66. class Rec {

  67.         public static void recive() {
  68.                 String string = null;
  69.                 DatagramSocket dSocket = null;
  70.                 try {
  71.                         dSocket = new DatagramSocket(10002);
  72.                 } catch (SocketException e1) {
  73.                         e1.printStackTrace();
  74.                 }
  75.                 DatagramPacket dPacket = null;
  76.                 while (true) {

  77.                         byte[] buf = new byte[1024];
  78.                         dPacket = new DatagramPacket(buf, 0, buf.length);
  79.                         try {
  80.                                 dSocket.receive(dPacket);
  81.                         } catch (IOException e) {
  82.                                 e.printStackTrace();
  83.                         }
  84.                         byte[] by = dPacket.getData();
  85.                         //string = new String(by, 0, by.length);
  86.                                                 string=new String(dPacket.getData(),0,dPacket.getLength());
  87.                                                 System.out.println("receive:"+string);
  88.                         if (string.equals("over")) {
  89.                                 break;
  90.                         }
  91.                 }
  92.                 dSocket.close();
  93.         }
  94. }
复制代码
我的运行结果如下:


回复 使用道具 举报
NO? 发表于 2014-4-10 00:14
谢谢。可是咱么说的不是一码事

不是吗?不然你说的是啥?我copy你那代码执行了,输入over是不结束啊,照我那个改下,输入了就结束啦!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马