Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:如何创建套接字?_C_Sockets_Datagram - Fatal编程技术网

C:如何创建套接字?

C:如何创建套接字?,c,sockets,datagram,C,Sockets,Datagram,我正在尝试创建一个用于客户端和服务器通信的套接字 我不太熟悉socket()和bind()的工作原理。如何创建数据报套接字 当我尝试编译它时,它说套接字的地址永远不会为NULL,并且不会使用sockfd int create_dg_socket(in_port_t port) { int socket(int domain, int type, int protocol); int bind(int sockfd, const struct sockaddr

我正在尝试创建一个用于客户端和服务器通信的套接字

我不太熟悉socket()和bind()的工作原理。如何创建数据报套接字

当我尝试编译它时,它说套接字的地址永远不会为NULL,并且不会使用sockfd

int create_dg_socket(in_port_t port) {

    int socket(int domain, int type, int protocol);

    int bind(int sockfd,
         const struct sockaddr *addr,
         socklen_t len);

    // Create the socket
    int sockfd;
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    if(socket==NULL) {
    fprintf(stderr, "create_dg_socket not implemented!\n");
    exit(-1);
    }
}
如何创建数据报套接字

像这样:

int create_dg_socket(in_port_t port) {

    // Create the socket

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        fprintf(stderr, "create_dg_socket cannot create socket! Error: %d\n", errno);
        return -1;
    }

    // Bind the socket port

    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));

    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = INADDR_ANY;

    if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
        fprintf(stderr, "create_dg_socket cannot bind socket! Error: %d\n", errno);
        close(sockfd);
        return -1;
    }

    return sockfd;
}

如何创建数据报套接字

像这样:

int create_dg_socket(in_port_t port) {

    // Create the socket

    int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockfd == -1) {
        fprintf(stderr, "create_dg_socket cannot create socket! Error: %d\n", errno);
        return -1;
    }

    // Bind the socket port

    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));

    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);
    addr.sin_addr.s_addr = INADDR_ANY;

    if (bind(sockfd, (struct sockaddr *)&addr, sizeof(addr)) != 0) {
        fprintf(stderr, "create_dg_socket cannot bind socket! Error: %d\n", errno);
        close(sockfd);
        return -1;
    }

    return sockfd;
}


您的代码是否产生错误?或者?@devlnotate是一个输入错误:
if(socket==NULL)
应该是
if(sockfd==NULL)
。不要为标准函数声明自己的原型,如
socket
bind
。改为包含正确的标题。`在这种情况下。为了学习C语言,你可能需要转向比套接字更简单的东西。@kaylum:。。。即使是
sockfd
也永远不会是
NULL
,因为它是
int
而不是指针。要测试
socket()
调用的成功结果,您需要针对
-1
进行测试,这表明失败。您的代码是否产生错误?或者?@devlnotate是一个输入错误:
if(socket==NULL)
应该是
if(sockfd==NULL)
。不要为标准函数声明自己的原型,如
socket
bind
。改为包含正确的标题。`在这种情况下。为了学习C语言,你可能需要转向比套接字更简单的东西。@kaylum:。。。即使是
sockfd
也永远不会是
NULL
,因为它是
int
而不是指针。为了测试
socket()
调用的成功结果,需要针对
-1
进行测试,这将指示失败。