当前位置: 代码迷 >> J2ME >> UDP协议通信,服务器短和客户端无法绑定同一个端口?解决思路
  详细解决方案

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

热度:4501   发布时间:2013-02-25 21:33:55.0
UDP协议通信,服务器短和客户端无法绑定同一个端口????????
一个简单的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的吗?
你的怎么和客户端一样的?
  相关解决方案