我正在尝试在c ++中的udp套接字上发送一个字符串。每当我运行此代码时,它始终打印无限找到的连接。我在这做错了什么?我不确定它在听的时候看到的是什么,或者我的监听代码中有什么东西是错的?任何帮助将不胜感激:)
void main()
{
long sucessful;
WSAData WinSockData;
WORD DLLVERSION;
DLLVERSION = MAKEWORD(2, 1);
sucessful = WSAStartup(DLLVERSION, &WinSockData);
SOCKADDR_IN ADDRESS;
int cacheSize = sizeof(ADDRESS);
SOCKET sock_LISTEN;
SOCKET sock_CONNECTION;
sock_CONNECTION = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
ADDRESS.sin_addr.s_addr = inet_addr("127.0.0.1");
ADDRESS.sin_family = AF_INET;
ADDRESS.sin_port = htons(444);
sock_LISTEN = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bind(sock_LISTEN, (SOCKADDR*)&ADDRESS, sizeof(ADDRESS));
listen(sock_LISTEN, SOMAXCONN);
for (;;) {
if (sock_CONNECTION = accept(sock_LISTEN,NULL, NULL)) {
cout << "connection was found \n";
sucessful = send(sock_CONNECTION, "I SEE YOU JAVA!", 100, NULL);
}
}
}
答案 0 :(得分:1)
UDP是无连接的,您无法在UDP套接字上调用listen()
或accept()
。它们都会失败并从WSAEOPNOTSUPP
报告WSAGetLastError()
。
您忽略了listen()
的错误。
您没有正确测试accept()
的返回值。当accept()
失败时,会返回INVALID_SOCKET
,其定义为(SOCKET)(~0)
(也称为-1
投放到SOCKET
)。任何非零值都将在布尔表达式中计算为true,例如if
语句。
在向其发送数据包之前,无法检测UDP侦听器是否正在运行。您所能做的就是无条件地发送数据包,并希望将响应发回。