typedef unsigned int uint16;
SOCKET s, new_socket;
uint16 port =18001;
void CreateSocket()
{
WSADATA wsa;
struct sockaddr_in server; // creating a socket address structure: structure contains ip address and port number
printf("Initializing Winsock\n");
if(WSAStartup(MAKEWORD(2,2), &wsa)!=0)
{
printf("Failed Error Code: %d", WSAGetLastError());
return -1;
}
printf("Initialised\n");
//CREATING a SOCKET
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("Could not Create Socket\n");
//return 0;
}
printf("Socket Created\n");
server.sin_addr.s_addr = inet_addr("192.168.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(port);
//Binding between the socket and ip address
if(bind (s, (struct sockaddr *) &server, sizeof(server)) == SOCKET_ERROR)
{
printf("Bind failed with error code: %d", WSAGetLastError());
}
puts("Bind Done");
//Listen to incoming connections
listen(s, 3);
//Accepting the incoming connection
new_socket = accept(s, NULL, NULL);
if (new_socket == INVALID_SOCKET)
{
printf(L"accept failed with error: %ld\n", WSAGetLastError());
closesocket(new_socket);
WSACleanup();
return 1;
}
else
printf("Client connected.\n");
关闭套接字;
}
int main()
{
CreateSocket();
return 0;
}
这是针对 TCP 的。 我通过上面的 IP 地址和端口号接收来自 MASTER 的连接,因此我为其创建了一个带有端口号和 IP 地址的套接字。但如何检查套接字是否处于事件状态?如何检查上述套接字代码是否有效(没有显示任何错误)。我在 MASTER 方面收到错误消息: 连接事件检查失败 (WSAGetLastError()) 有人可以帮我吗?
最佳答案
你的套接字和地址之间没有任何联系,你永远不会bind()
server
中的地址到套接字s
。
这当然就是您的客户端无法连接的原因,因为套接字不会使用预期的端口。我假设您在其他地方调用 accept()
依此类推,实际上使套接字也接受传入连接。
关于c - 如何检查 TCP 层上的套接字是否处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21023874/