我遇到了最奇怪的问题,让我头疼。考虑以下代码:
// Create and bind socket
std::map<Connection, bool> clients;
unsigned short port=6222;
struct sockaddr_in local_address, from_address;
int result;
char buffer[10000];
SOCKET receive_socket;
local_address.sin_family = AF_INET;
local_address.sin_addr.s_addr = INADDR_ANY;
local_address.sin_port = htons(port);
receive_socket = socket(AF_INET,SOCK_DGRAM,0);
发生的事情是 receive_socket 没有绑定,我得到 SOCKET_ERROR。当我调试程序并检查receive_socket时,它似乎只是乱码。我在“std::map”行上放了一个断点。当我进入上述代码的每一行时,调试光标直接从“无符号短端口”行跳转到第一个“local_address.sin”行,即使我正在使用步进(F11),它也不会停止struct、int、char 或 SOCKET 行,它会直接跳过它们。
此时,我将鼠标悬停在 local_address、from_address、result、buffer 和 receive_socket 上。他们都充满了乱码。这是因为我还没有定义这些变量吗?我还注意到,当我到达上述代码的底部时,local_address.sin_port 设置为 19992,但应该是 6222?
编辑:这是我的绑定代码,因为 if 语句为真而失败:
if(bind( receive_socket, (SOCKADDR*) &local_address, sizeof(local_address)) == SOCKET_ERROR)
{
closesocket(receive_socket);
return 1;
}