在工作中,我们正在开发一个与机顶盒(STB)通信的Android应用程序。
一切正常,但我试图创建一个" mock"应用程序可以连接的STB,以便我可以控制响应以进行测试。
我无法访问STB中的代码以了解他们如何设置套接字,但我确实有应用程序使用的客户端代码的简化版本。
这是客户端代码:
public class UDPClient {
public static void main(String[] args) throws SocketException, UnknownHostException {
DatagramSocket c = new DatagramSocket(12345);
c.setBroadcast(true);
c.setSoTimeout(20000);
String msearchData = "DATA";
byte[] sendData = mSearchData.getBytes();
try {
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900);
c.send(sendPacket);
System.out.println("Request packet sent");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// wait for reply
byte[] recBuf = new byte[15000];
DatagramPacket receivePacket = new DatagramPacket(recBuf, recBuf.length);
try {
c.receive(receivePacket);
System.out.println("PACKET RECEIVED!");
System.out.println(new String(receivePacket.getData()));
} catch (IOException e) {
e.printStackTrace();
}
c.close();
}
}
当我在我的开发笔记本电脑上运行此代码时(我在使用该STB的无线网络上),STB会做出响应。
但是,我有另一台笔记本电脑设置假装在同一网络上的另一个STB(模拟STB)。
" mock" STB只是拒绝接收广播请求而且我被卡住了。
这里有一些我用来作为模拟STB的代码。我尝试了各种端口组合,但没有任何效果。
public class MockBox {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
while (true) {
System.out.println(">>>Ready to receive broadcast packets!");
byte[] recvBuf = new byte[15000];
DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
socket.receive(packet); // blocks
// Packet received
System.out.println(">>>Packet received from " + packet.getAddress().getHostAddress());
System.out.println(">>>Packet data: " + new String(packet.getData()));
socket.close();
}
}
}
任何帮助表示赞赏!
答案 0 :(得分:0)