0

我只能用我的 Client.class 发送数据包,但我不能用我的 Server.class 接收数据包。客户端和服务器在每种情况下都是两个线程。要更新MainActivity我使用处理程序。处理程序有效(我对其进行了测试)但不是 Server.class。

public class Client implements Runnable {

    //@Override
    public void run() {
        do{
            try {
                    InetAddress serverAddr = InetAddress.getByName(Server.CLIENTIP);

                    DatagramSocket socket = new DatagramSocket();

                    byte[] buf = ("Test").getBytes();

                    DatagramPacket packet = new DatagramPacket(buf, buf.length,serverAddr,Server.CLIENTPORT);

                    socket.send(packet);
                }     
            catch (Exception e) {}
        }
        while(open == true);
    }
}

public class Server implements Runnable {

public static String CLIENTIP = "192.168.0.13";//send-ip
public static String SERVERIP = "10.0.0.18";//receive-ip
public static final int CLIENTPORT = 5000; //send-port
public static final int SERVERPORT = 5001; //receive-port

 //@Override
    public void run() {
        do
        {
            try {
                DatagramSocket socket = new DatagramSocket(SERVERPORT);

                    byte[] buf = new byte[256];
                    DatagramPacket rpacket = new DatagramPacket(buf, buf.length);

                    socket.receive(rpacket);

                    String x = new String(rpacket.getData());
                    MainActivity.glText = x;        
                    MainActivity.mHandler.post(MainActivity.mTimer);

                } 
            catch (Exception e) {}
        }
        while(open == true);
    }
}

有没有人解决这个问题?感谢您的回答!;)

4

2 回答 2

1

如果您尝试使用粘贴的代码进行通信,则您正在侦听的端口号与您尝试发送的端口号不同。

您将无法从设备外部轻松连接服务器,因为您绑定到localhost地址(省略时为默认地址):

DatagramSocket socket = new DatagramSocket(SERVERPORT);

您应该绑定到可以从您的 PC 访问的地址:

DatagramSocket socket = new DatagramSocket(SERVERPORT02,
                        InetAddress.getByName(SERVERIP));
于 2012-05-23T11:00:46.713 回答
0

你在用模拟器吗?如果是这样,您可能会转发端口,以便模拟器可以接收数据包。

要将端口从主机重定向到仿真器设备,请使用以下格式的 redir 命令:redir add ::

例如,要将目的端口为 5001 的 UDP 数据包转发到具有相同端口的模拟器中,可以使用:redir add udp:5001:5001

于 2012-05-23T12:10:33.587 回答