UDP协议通信,服务器短和客户端无法绑定同一个端口????????

sknice 2011-12-02 04:54:30
一个简单的Java UDP协议通信的例子
server:

import java.net.*;

public class UDPServer {
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte receiveByte[];
private String receiveStr;

public UDPServer() {
Init();
}

public void Init() {
try {
dataSocket = new DatagramSocket(PORT);
receiveByte = new byte[1024];
dataPacket = new DatagramPacket(receiveByte, receiveByte.length);
receiveStr = "";
int i = 0;
while (i == 0)// 无数据,则循环

{
dataSocket.receive(dataPacket);
i = dataPacket.getLength();
// 接收数据

if (i > 0) {
// 指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点

receiveStr = new String(receiveByte, 0, dataPacket.getLength());
System.out.println(receiveStr);
i = 0;// 循环接收

}
}
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String args[]) {
new UDPServer();
}
}

client:

import java.io.*;
import java.net.*;

public class UDPClient {
private static final int PORT = 5000;
private DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte sendDataByte[];
private String sendStr;

public UDPClient() {
Init();
}

public void Init() {
try {
// 指定端口号,避免与其他应用程序发生冲突

dataSocket = new DatagramSocket(PORT);
sendDataByte = new byte[1024];
sendStr = "UDP方式发送数据";
sendDataByte = sendStr.getBytes();
dataPacket = new DatagramPacket(sendDataByte, sendDataByte.length,
InetAddress.getByName("localhost"), PORT);
dataSocket.send(dataPacket);
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException ie) {
ie.printStackTrace();
}
}

public static void main(String args[]) {
new UDPClient();
}
}

如果server 和 client 同时绑定端口 5000的话提示错误:
java.net.BindException: Address already in use: Cannot bind
如果绑定不同的端口吧,client发送的内容server又收不到。
该怎么办呢???????????????????????????????????
...全文
767 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
slnh312 2013-04-15
  • 打赏
  • 举报
回复
我知道这个问题,你将发送端的那个端口号改一下就可以了,你定义的那个端口号当前被占着!!!所以接收端始终接收不到数据
sknice 2011-12-05
  • 打赏
  • 举报
回复
自己顶
gukuitian 2011-12-02
  • 打赏
  • 举报
回复
sorry,是我没了解过这个DatagramSocket。查了下确实可收发的
[Quote=引用 5 楼 sknice 的回复:]
引用 4 楼 gukuitian 的回复:

服务器端不是用ServerSocket的吗?
你的怎么和客户端一样的?

我不太懂,我是从那个网页copy过来的,http://lzj0470.iteye.com/blog/353927
[/Quote]
sknice 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gukuitian 的回复:]

服务器端不是用ServerSocket的吗?
你的怎么和客户端一样的?
[/Quote]
我不太懂,我是从那个网页copy过来的,http://lzj0470.iteye.com/blog/353927
gukuitian 2011-12-02
  • 打赏
  • 举报
回复
服务器端不是用ServerSocket的吗?
你的怎么和客户端一样的?
sknice 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ruogannian 的回复:]

dataSocket = new DatagramSocket(PORT);

-->

dataSocket = new DatagramSocket();
[/Quote]
这么改就不出错了,但是服务器短也收不到数据。服务器的代码是不是有什么问题
若干年 2011-12-02
  • 打赏
  • 举报
回复
dataSocket = new DatagramSocket(PORT);

-->

dataSocket = new DatagramSocket();
oO临时工Oo 2011-12-02
  • 打赏
  • 举报
回复
如果你开发时,在同一台电脑上测试,两个端口当然不能用, 一个电脑(的操作系统的TCP协议里)只有一个5000端口,如果换在两台不同的电脑上测试应该可以。

而且按理,客户端不需要绑定端口,连接服务器时自己会从操作系统获得一个可用端口号

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧