无法通过交叉电缆从Android UDP连接发送数据包

时间:2015-11-11 16:27:14

标签: java android sockets udp

我正在尝试在Android平板电脑上发送/接收UDP数据包。我在我的Windows笔记本电脑上设置了一个Java程序,使用与平板电脑相同的UDP读取器/写入器类(Android读卡器和计算机编写器使用相同的端口,反之亦然),我使用的是交叉电缆和用于连接两者的USB以太网适配器。

我始终能够从计算机上接收平板电脑上的数据包。但是,即使我可以通过同一网络接收数据包,从平板电脑向计算机发送数据包通常也会出现java.net.SocketException: sendto failed: ENETUNREACH (Network is unreachable)错误。

如果我打开平板电脑的无线网络,我就不会再收到错误,但是我没有通过以太网连接获取数据包。

当我将系统插入带有交换机的网络时,我能够让系统正常工作,所以我想知道是否存在一些我的计算机缺失的基础网络设置。

或者:有没有办法告诉它尝试发送UDP数据包,无论它是否认为它已连接?

对于这些类,serverIP是平板电脑尝试与之通信的计算机的地址。每个serverPort对应于对方正在寻找的内容。

UDP Writer类:

public void sendMessage(final SentMessage message) {
try {
    try (DatagramChannel channel = DatagramChannel.open()) {
        try (DatagramSocket socket = channel.socket()) {
            socket.bind(new InetSocketAddress(this.serverPort));
            byte[] byteArray = message.buildByteArray(false);
            DatagramPacket sendPacket = new DatagramPacket(byteArray, byteArray.length, this.serverIP, this.serverPort);
            socket.send(sendPacket);
        }
    }
}
catch (Exception e) {
    log.log(Level.SEVERE,  e.getMessage(), e);
    e.printStackTrace();

} }

UDP Reader类:

protected void runServer() {

try {
    try (DatagramChannel channel = DatagramChannel.open()) {
        try (DatagramSocket socket = channel.socket()) {
            socket.bind(new InetSocketAddress(this.serverPort));                
            int messageSize = 48;
            while (this.mRun) {
                //Read in packet
                final byte[] messageBytes = new byte[messageSize];
                DatagramPacket receivedMessage = new DatagramPacket(messageBytes, messageSize, this.serverIP, this.serverPort);
                socket.receive(receivedMessage);

                //Convert to known message type
                //...
            }
        }
    }
} catch (Exception e) {
    log.log(Level.SEVERE,  e.getMessage(), e);
    e.printStackTrace();

} }

0 个答案:

没有答案