SendMessage()到win32应用程序vc ++

时间:2015-04-03 15:54:08

标签: winapi

我有一个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();
}

1 个答案:

答案 0 :(得分:1)

接受是同步调用而不是返回,直到客户端连接。这个桅杆不能在GUI线程中使用。需要或在另一个线程中执行此调用或(最好)仅使用异步api(AcceptEx)