18,356
社区成员
发帖
与我相关
我的任务
分享
// 初始化Winsock库
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2/*0*/);
if (WSAStartup(sockVersion, &wsaData) != 0) {
return SOCK_ERROR_WSAStartup;
}
int create_tcp_server(const char* szIP, int nPort) {
if (nServerStatus != TCP_STATUS_OFF) {
return SOCK_SERVER_NOT_CLOSE;
}
if (szIP == NULL) {
return SOCK_ERROR_IP_NULL;
}
if (nPort < 0 || nPort > 65535) {
return SOCK_ERROR_PORT_OF_RANGE;
}
// 初始化TCP
int nError = init_tcp_socket();
if (nError != SOCK_SUCCESS) {
return nError;
}
if (sockServer != INVALID_SOCKET) {
closesocket(sockServer);
sockServer = INVALID_SOCKET;
}
// 创建套接字
sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockServer == INVALID_SOCKET) {
return SOCK_SERVER_SOCKET_FAIL;
}
//绑定IP和端口
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(nPort);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (strcmp(szIP, "") != 0) {
sin.sin_addr.S_un.S_addr = inet_pton(sin.sin_family, szIP, (void *)&sin);
}
else {
sin.sin_addr.S_un.S_addr = INADDR_ANY;
}
if (bind(sockServer, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR) {
printf("\nSocket bind error code: %d\n", WSAGetLastError());
return SOCK_SERVER_BIND_FAIL;
}
return SOCK_SUCCESS;
}
if (strcmp(szIP, "") != 0) {
sin.sin_addr.S_un.S_addr = inet_pton(sin.sin_family, szIP, (void *)&sin);
}
else {
sin.sin_addr.S_un.S_addr = INADDR_ANY;
}