我只能使用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);
}
}
有没有人解决这个问题?谢谢你的回答! ;)
答案 0 :(得分:1)
如果您尝试使用粘贴的代码进行通信,那么您正在侦听不同于您尝试发送的端口号。
您将无法轻松地从设备外部连接服务器,因为您绑定到localhost
地址(省略时为默认地址):
DatagramSocket socket = new DatagramSocket(SERVERPORT);
您应该绑定到可从您的PC访问的地址:
DatagramSocket socket = new DatagramSocket(SERVERPORT02,
InetAddress.getByName(SERVERIP));
答案 1 :(得分:0)
您使用的是模拟器吗?如果是这样,您可能转发端口以便仿真器可以接收数据包。
要将端口从主机重定向到模拟器设备,请使用redir命令 这种格式: redir add ::
例如,将带有目标端口5001的UDP数据包转发到模拟器中 同一个端口,你可以使用: redir add udp:5001:5001