首页 文章

Android UDP麻烦

提问于
浏览
0

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

    我已经实现了两个socket用于发送,另一个用于接收,并且正在为我工作,根据我的需要进行一些修改 . 我假设你忘记了端口...或者其他东西......记录你的错误或更多代码来帮助你...以下是为我工作的代码

    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
    }
    

相关问题