服务器端收到UDP错误数据

开发Android

我在 Windows 上有一个 C++ UDP 客户端,在 Android 上有一个 Java UDP 服务器。我想将数据从客户端发送到服务器。当我发送一个简单的“Hello”时,我在服务器端得到了错误的值。

这是我的代码:Init client C++

int Socket::createUDPSocket(char *ip) {
int i_result = WSAStartup(MAKEWORD(2, 2), &mWSAData);

mSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (mSocket == SOCKET_ERROR || mSocket == INVALID_SOCKET) {
    WSACleanup();
    return i_result;
}

RtlZeroMemory(&mUdpConf, sizeof(mUdpConf));
mUdpConf.sin_family = AF_INET;
mUdpConf.sin_addr.s_addr = inet_addr(ip);
mUdpConf.sin_port = htons(DEFALT_UDP_PORT);

i_result = connect(mSocket, (struct sockaddr *) &mUdpConf, sizeof(mUdpConf));
if (i_result == SOCKET_ERROR) {
    closesocket(mSocket);
    mSocket = INVALID_SOCKET;
    return i_result;
}

return i_result;
}

发送数据客户端:

void Socket::sendUdpData(char *data, int size) {
int result = sendto(mSocket, data, size, 0, (struct sockaddr *) &mUdpConf, sizeof(mUdpConf));
if (result == SOCKET_ERROR) {
    closesocket(mSocket);
    WSACleanup();
    return;
}
}

服务器端(Java):

private class ServerUDPThread implements Runnable {
    @Override
    public void run() {
        DatagramSocket serverSocket;
        try {
            serverSocket = new DatagramSocket(null);
            serverSocket.setReuseAddress(true);
            serverSocket.setReceiveBufferSize(35000);
            serverSocket.bind(new InetSocketAddress(5010));
            byte[] receiveData = new byte[35000];
            while (!Thread.currentThread().isInterrupted()) {
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);
                if (receiveData.length > 0) {
                    System.out.println("Size UDP packet received = " + receivePacket.getLength());
                    getBufferSocketUDP(receiveData.length, receiveData);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我根本没有收到“你好”。即使我改变了这个词,我总是收到同样奇怪的结果..谢谢

彼得·劳瑞

receiveData.length始终35000是数组的大小。

很可能您打算使用实际读取的数据长度,例如

serverSocket.receive(receivePacket);
if (receivePacket.getLength() > 0) {
    System.out.println("Size UDP packet received = " + receivePacket.getLength());
    getBufferSocketUDP(receivePacket.getLength(), receiveData);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RabbitMQ:服务器端对每个收到的消息的计算

来自分类Dev

RabbitMQ:服务器端对每个收到的消息的计算

来自分类Dev

客户端数据到服务器端

来自分类Dev

Web服务的服务器端数据推送

来自分类Dev

大型数据集的JSON序列化时的jQuery DataTable服务器端处理错误

来自分类Dev

如何正确处理服务器端错误?

来自分类Dev

React Router / Hapi服务器端渲染错误

来自分类Dev

Blazor服务器端oninput事件导致错误

来自分类Dev

服务器端使用toLocaleString的日期格式错误

来自分类Dev

使用Angular Material处理服务器端错误

来自分类Dev

服务器端帐户创建错误

来自分类Dev

服务器端GCM返回错误400

来自分类Dev

服务器端表单验证怪异错误

来自分类Dev

jQuery DataTables POST服务器端Json错误

来自分类Dev

React服务器端渲染错误页面

来自分类Dev

Rails 5 服务器端错误处理

来自分类Dev

Socket.io在服务器端丢失数据

来自分类Dev

服务器端对Firebase数据的过滤

来自分类Dev

使用REST在服务器端保存数据

来自分类Dev

使用异步数据获取的服务器端渲染

来自分类Dev

服务器端Yajra数据表列:[]操作

来自分类Dev

Nuxt:仅在服务器端获取数据

来自分类Dev

使用哪个,会话,Cookie,服务器端数据?

来自分类Dev

如何从服务器端的jQuery Ajax检索“数据”?

来自分类Dev

服务器端的jQuery多种数据解码

来自分类Dev

数据表服务器端脚本

来自分类Dev

根据服务器端脚本的数据创建视频

来自分类Dev

服务器端处理数据表

来自分类Dev

在服务器端缓存选择查询数据