簡體   English   中英

Windows上的C套接字編程在偵聽時出錯,但沒有errno

[英]C Socket programming on windows errors on listen but no errno

我已經用其他語言完成了套接字編程,但從未處理過直接用C語言進行編程的事情。 我正在嘗試設置一個簡單的服務器來偵聽Windows下的8080端口。 我正在使用mingw隨附的gcc來編譯代碼。



    #include <stdio.h>
    #include <string.h>
    #include <WinSock2.h>
    #include <stdint.h>
    #include <time.h>

        int main(void) {

        int s;      
        int len;
        char  buffer[1025];  
        struct sockaddr_in servAddr; 
        struct sockaddr_in clntAddr; 

        int clntAddrLen; //length of client socket addre

    //Build local (server) socket add

        memset(&servAddr, 0, sizeof(servAddr));
        servAddr.sin_family = AF_INET;
        servAddr.sin_port = htons(8080);
        servAddr.sin_addr.s_addr = htonl(INADDR_ANY);

       //create socket
        if((s=socket(AF_INET, SOCK_STREAM, 0) %lt; 0 )){
            perror("Error: Socket Failed!");
                printf("%d\n", errno);
            exit(1);
        }

    //bind socket to local address and port
        if((bind(s,(struct sockaddr*)&servAddr, sizeof(servAddr)) %lt; 0))
        {
            perror("Error:bind failed!");
                printf("%d\n", errno);
            exit(1);
        }

        for(;;)
        {
            len = recvfrom(s,buffer, sizeof(buffer),0,(struct sockaddr*)&clntAddr, &clntAddrLen);

            //send string
            sendto(s, buffer, len, 0, (struct sockaddr*)&clntAddr, sizeof(clntAddr));
        }

    }

當我運行代碼時,它會錯誤地綁定,但是沒有錯誤。 該代碼是從該線程中獲取並稍作修改的: Windows C套接字編程

但是沒有錯誤代碼。 輸出顯示沒有錯誤。 它在綁定時失敗,我不確定為什么。 我一直在拼湊一些不同的資料。 我實際上只是想要一些可以在Windows上的C語言中進行hello world / 3方式握手的東西。

提前致謝。

由於運算符優先級,這是不正確的:

if((s=socket(AF_INET, SOCK_STREAM, 0) < 0 )){

因為<優先級高於= 這意味着碼將分配10s取決於結果socket(AF_INET, SOCK_STREAM, 0) < 0 改成:

if((s=socket(AF_INET, SOCK_STREAM, 0)) < 0 ){

使用WSAGetLastError()獲取失敗原因,而不是errno 從MSDN bind()參考頁:

如果沒有錯誤發生,則綁定返回零。 否則,它將返回SOCKET_ERROR, 並且可以通過調用WSAGetLastError來檢索特定的錯誤代碼。

在Windows上,必須在調用任何套接字函數之前調用WSAStartup()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM