黑马程序员技术交流社区

标题: UDP 发送的一个小问题 哪里出错了呢 [打印本页]

作者: 丁二跃    时间: 2012-7-15 12:28
标题: UDP 发送的一个小问题 哪里出错了呢
边看视频边练习 写了个程序 可是有点小问题


  1. import java.io.BufferedReader;
  2. import java.net.DatagramPacket;
  3. import java.net.DatagramSocket;
  4. import java.net.InetAddress;
  5. import java.util.Scanner;
  6. import java.util.concurrent.Executors;

  7. import javax.sound.midi.Receiver;

  8. public class Send {

  9. /*
  10. 通过udp通信 将一段数据发送出去
  11. 1.建立 udp socket 服务
  12. 2.提供数据 数据封装到 包
  13. 3.发送
  14. 4.关闭
  15. */

  16. public static void main(String[] args)throws Exception {

  17. Executors.newSingleThreadExecutor().execute(new Runnable() {
  18. public void run() {
  19. try {
  20. receice();
  21. } catch (Exception e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25. };
  26. });

  27. Thread.sleep(1000);
  28. Executors.newSingleThreadExecutor().execute(new Runnable() {
  29. public void run() {
  30. try {
  31. send();
  32. } catch (Exception e) {
  33. // TODO Auto-generated catch block
  34. e.printStackTrace();
  35. }
  36. };
  37. });

  38. }


  39. static void send() throws Exception{
  40. //建立 udp 服务 可以指定端口 送 不指定 则随机使用端口 发送数据
  41. DatagramSocket ds =new DatagramSocket();
  42. //确定数据 封装成包 DatagramPacket(字节数组, 要发送的长度,发送的ip,目标端口)
  43. Scanner sc = new Scanner(System.in);
  44. String str="";
  45. for(;;){
  46. System.out.print("请输入:");
  47. str = sc.nextLine();
  48. byte[] buf =str.getBytes();
  49. DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getLocalHost(),2255);
  50. //发送数据
  51. ds.send(dp);
  52. }

  53. }


  54. static void receice() throws Exception{
  55. //创建upd socket 服务 应该指定端口 则 该socket 将在此端口接受数据
  56. DatagramSocket ds = new DatagramSocket(2255);
  57. for(;;){
  58. byte[] buf = new byte[1024];
  59. DatagramPacket dp =new DatagramPacket(buf, buf.length);
  60. ds.receive(dp);//接受数据包
  61. String ip = dp.getAddress().getHostAddress();
  62. String msg = new String(dp.getData(),0,dp.getLength());// 获取接受的信息
  63. int port = dp.getPort();

  64. System.out.println(ip+":"+port+"---->"+msg);
  65. }

  66. }
  67. }
复制代码

程序有一个发送 方法 一个接受方法, 在main方法先用一个线程开启接受 ,间隔1s 后用另一个线程开启发送。
但是为什么第一次发送的数据总是接受不到呢?







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