我在 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] 删除。
我来说两句