Android UDP麻烦

时间:2014-03-31 18:12:21

标签: java android udp

我正在开发一个用于学习目的的小项目,包括两个客户端实例和一个服务器实例。 服务器和其中一个客户端在我的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"/>

我感谢任何提示。非常感谢你!

1 个答案:

答案 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
}