UDP协议通信,服务器短和客户端无法绑定同一个端口?解决思路
UDP协议通信,服务器短和客户端无法绑定同一个端口????????
一个简单的Java UDP协议通信的例子
server:
client:
如果server 和 client 同时绑定端口 5000的话提示错误:
java.net.BindException: Address already in use: Cannot bind
如果绑定不同的端口吧,client发送的内容server又收不到。
该怎么办呢???????????????????????????????????
------解决方案--------------------
如果你开发时,在同一台电脑上测试,两个端口当然不能用, 一个电脑(的操作系统的TCP协议里)只有一个5000端口,如果换在两台不同的电脑上测试应该可以。
而且按理,客户端不需要绑定端口,连接服务器时自己会从操作系统获得一个可用端口号
------解决方案--------------------
dataSocket = new DatagramSocket(PORT);
-->
dataSocket = new DatagramSocket();
------解决方案--------------------
服务器端不是用ServerSocket的吗?
你的怎么和客户端一样的?
一个简单的Java UDP协议通信的例子
server:
- Java code
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:
- Java code
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又收不到。
该怎么办呢???????????????????????????????????
------解决方案--------------------
如果你开发时,在同一台电脑上测试,两个端口当然不能用, 一个电脑(的操作系统的TCP协议里)只有一个5000端口,如果换在两台不同的电脑上测试应该可以。
而且按理,客户端不需要绑定端口,连接服务器时自己会从操作系统获得一个可用端口号
------解决方案--------------------
dataSocket = new DatagramSocket(PORT);
-->
dataSocket = new DatagramSocket();
------解决方案--------------------
服务器端不是用ServerSocket的吗?
你的怎么和客户端一样的?