我有一个win32应用程序项目。但当程序到达一个像这样的地方 让我们说new_socket = accept(socket,(sockaddr *)& client,& c); 它卡住了。在这些脚本中,它使我无法使用任何其他按钮,文件菜单等等。任何人都可以告诉我出了什么问题以及如何解决它。
这是它被卡住的功能:
void server(){
WSADATA wsa;
SOCKET server_socket, client_socket;
struct sockaddr_in server, client;
int c, yes=1;
int sent_length = 1;
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0) printf("Failed. Error Code : %d",WSAGetLastError());
if((server_socket = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
printf("Could not create socket : %d" , WSAGetLastError());
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = 0;
server.sin_port = htons(8080);
memset(&(server.sin_zero), '\0', 8);
bind(server_socket ,(struct sockaddr *)&server , sizeof(server));
listen(server_socket, 3);
c = sizeof(struct sockaddr_in);
while(1){
client_socket = accept(server_socket,(struct sockaddr *)&client, &c);
send(client_socket, "Hello, World", 13, 0);
}
WSACleanup();
}
答案 0 :(得分:1)
接受是同步调用而不是返回,直到客户端连接。这个桅杆不能在GUI线程中使用。需要或在另一个线程中执行此调用或(最好)仅使用异步api(AcceptEx)