我正在开发一个用于学习目的的小项目,包括两个客户端实例和一个服务器实例。 服务器和其中一个客户端在我的PC上运行,其代码用Java编写,而第二个客户端在android上运行。
服务器正在侦听给定端口。当Java客户端向服务器发送数据包时,它会保留要发送的IP /端口以响应从android终端收到的未来数据包,反之亦然。
每个客户端和服务器之间的通信正常工作。但是当在客户端之间进行通信时(假设每个客户端都获得了ip / port,作为来自服务器的响应)没有任何东西来到android终端。
在客户端的两个实例中,套接字创建为:
DatagramSocket socket = new DatagramSocket ();
然后只与服务器联系一次,以存储我的地址数据:
Socket.Send ( sendPacket ) ;
(SendPacket使用固定数据服务器实例化)
然后实例化listen方法,作为参数传递一个仅包含要接收的字节数的数据报包。
socket.receive (packet );
在无限循环中实现此方法,我只设法接收来自服务器的数据包(答案),而不是其他客户端应用程序。
我使用的清单中的权限是:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
我感谢任何提示。非常感谢你!
答案 0 :(得分:0)
我已经实现了两个用于发送的套接字和另一个用于接收的套接字,并且正在为我提供满足我需求的一些修改。我假设您忘记了端口......或者其他东西......记录您的错误或更多代码以帮助您... 以下是为我工作的代码
int port =1515;
DatagramSocket socket = null;
try {
socket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
try {
socket.setBroadcast(true);
} catch (SocketException e) {
e.printStackTrace();
}
//////send socket
int eport = 1616;
InetAddress eip = null;
try {
eip = InetAddress.getByName("192.168.1.1"); ////SERVER IP ADDRESS ---- Server comunication is working so I assume you have it
} catch (UnknownHostException e) {
e.printStackTrace();
}
DatagramSocket esocket = null;
try {
esocket = new DatagramSocket(eport);
} catch (SocketException e) {
e.printStackTrace();
}
//////Start receive
while(true)
{
byte[] message = new byte[60*1024];
DatagramPacket recv_packet = new DatagramPacket(message, message.length);
try {
socket.receive(recv_packet);
} catch (IOException e) {
e.printStackTrace();
}
///Do something whit recv_packet
}