现在的问题是这样的,对方把接收到的数据发送到其本机的11012端口上,我现在想通过DatagramSocket 接收的报文, public static void main(String args[]) throws UnknownHostException{
InetAddress ip =InetAddress.getByName("10.11.1.22";
System.out.println(ip);
try {
ds =new DatagramSocket(ClientPort,ip);
while(true){
ds.receive(new DatagramPacket(buff,buff.length));
System.out.println("客户端收到了服务端的信息:"+new String(buff,0,buff.length));
}
} catch (SocketException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
} 运行之后,结果报如下错误,大家帮忙分析一下:
java.net.BindException: Cannot assign requested address: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)
at java.net.DatagramSocket.bind(DatagramSocket.java:36
at java.net.DatagramSocket.<init>(DatagramSocket.java:210)
at java.net.DatagramSocket.<init>(DatagramSocket.java:261)
***********************
InetAddress ip =InetAddress.getByName("10.11.1.22";
System.out.println(ip);
try {
ds =new DatagramSocket(ClientPort,ip);
while(true){
ds.receive(new DatagramPacket(buff,buff.length));
System.out.println("客户端收到了服务端的信息:"+new String(buff,0,buff.length));
}
} catch (SocketException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
} 运行之后,结果报如下错误,大家帮忙分析一下:
java.net.BindException: Cannot assign requested address: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:82)
at java.net.DatagramSocket.bind(DatagramSocket.java:36
at java.net.DatagramSocket.<init>(DatagramSocket.java:210)
at java.net.DatagramSocket.<init>(DatagramSocket.java:261)
***********************
try {
DatagramSocket ds = new DatagramSocket(8585);
byte[] buf = new byte[100];
DatagramPacket dp = new DatagramPacket(buf, 100);
ds.receive(dp);
System.out.println(new String(buf, 0, dp.getLength()));
String str = "OK,i'M received";
DatagramPacket dpSend = new DatagramPacket(str.getBytes(), str
.length(),
dp.getAddress(), dp.getPort());
ds.send(dpSend);
ds.close();
}
catch (SocketException ex) {
ex.printStackTrace();
}
catch (IOException ex1) {
ex1.printStackTrace();
}
} public static void send() {
try {
DatagramSocket ds = new DatagramSocket();
String str = "Hello,I'm closewbq";
DatagramPacket dp = new DatagramPacket(str.getBytes(),
str.length(),
InetAddress.getByName("localhost"),
8585);
ds.send(dp);
byte[] buf = new byte[100];
DatagramPacket dpRecv = new DatagramPacket(buf, 100);
ds.receive(dpRecv);
System.out.println(new String(buf, 0, dpRecv.getLength()));
ds.close();
flag=true;
}
catch (SocketException ex) {
ex.printStackTrace(); }
catch (IOException ex1) {
ex1.printStackTrace();
}
}
就行了吧?
Integer port = 11012;
byte[] buffer = new byte[2048];
try {
DatagramSocket datagramSocket = new DatagramSocket(port);
DatagramPacket datagramPacket = new DatagramPacket(buffer,
buffer.length);
try {
for (;;) {
System.out.println("begin receive data....");
datagramSocket.receive(datagramPacket);
System.out.println(datagramPacket.getAddress().getAddress().toString()+"======="+new String(datagramPacket.getData()));
datagramPacket.setLength(datagramPacket.getData().toString().length());
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
} }
我也就很奇怪了,是不是不能用数据报套接字呀,得用TCP/IP的SOCKET才可以呀。
不清楚这两者有何明现的区别。
//InetAddress ip =InetAddress.getByName("10.11.1.22";
//System.out.println(ip);
try {
ds =new DatagramSocket(ClientPort);
while(true){
ds.receive(new DatagramPacket(buff,buff.length));
System.out.println("客户端收到了服务端的信息:"+new String(buff,0,buff.length));
}
} catch (SocketException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
这是修改之后的代码,有问题吗?
你这个ClientPort确定要和发送端端口一致,贴发送端的出来看看TCP有连接开销大,UDP一个没连接速度快
所以UDP只管照着一个端口发包,掉不掉包的咱就不管了