黑马程序员技术交流社区
标题:
UDP 发送的一个小问题 哪里出错了呢
[打印本页]
作者:
丁二跃
时间:
2012-7-15 12:28
标题:
UDP 发送的一个小问题 哪里出错了呢
边看视频边练习 写了个程序 可是有点小问题
import java.io.BufferedReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
import java.util.concurrent.Executors;
import javax.sound.midi.Receiver;
public class Send {
/*
通过udp通信 将一段数据发送出去
1.建立 udp socket 服务
2.提供数据 数据封装到 包
3.发送
4.关闭
*/
public static void main(String[] args)throws Exception {
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
try {
receice();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
});
Thread.sleep(1000);
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
try {
send();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
});
}
static void send() throws Exception{
//建立 udp 服务 可以指定端口 送 不指定 则随机使用端口 发送数据
DatagramSocket ds =new DatagramSocket();
//确定数据 封装成包 DatagramPacket(字节数组, 要发送的长度,发送的ip,目标端口)
Scanner sc = new Scanner(System.in);
String str="";
for(;;){
System.out.print("请输入:");
str = sc.nextLine();
byte[] buf =str.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getLocalHost(),2255);
//发送数据
ds.send(dp);
}
}
static void receice() throws Exception{
//创建upd socket 服务 应该指定端口 则 该socket 将在此端口接受数据
DatagramSocket ds = new DatagramSocket(2255);
for(;;){
byte[] buf = new byte[1024];
DatagramPacket dp =new DatagramPacket(buf, buf.length);
ds.receive(dp);//接受数据包
String ip = dp.getAddress().getHostAddress();
String msg = new String(dp.getData(),0,dp.getLength());// 获取接受的信息
int port = dp.getPort();
System.out.println(ip+":"+port+"---->"+msg);
}
}
}
复制代码
udp.jpg
(8.82 KB, 下载次数: 8)
下载附件
2012-7-15 12:26 上传
程序有一个发送 方法 一个接受方法, 在main方法先用一个线程开启接受 ,间隔1s 后用另一个线程开启发送。
但是为什么第一次发送的数据总是接受不到呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2