Unix的交流电插座服务器不接受连接 [英] Unix C socket server not accepting connections

查看:125
本文介绍了Unix的交流电插座服务器不接受连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里的交易,我C语言编写一个简单的TCP套接字服务器(使用UNIX系统调用),我是不是能够得到接受连接。

从我可以告诉,我通过服务器初始化拿到就好了,但是当我尝试连接到我打印出来的端口(见$ C $以下三)拒绝就好像无所不有。

更重要的是,当我用netstat端口甚至没有使用。我不扔我目前设立任何错误,我都干涸了的想法。

  INT的main(){    INT sock_fd;
    INT conn_fd;
    结构SOCKADDR_IN serv_addr;
    结构SOCKADDR_IN cli_addr;
    socklen_t的* serlen;
    socklen_t的* clilen;
    clilen =的malloc(sizeof的(socklen_t的));
    serlen =的malloc(sizeof的(socklen_t的));
    * serlen = sizeof的(serv_addr);
    * clilen = sizeof的(cli_addr);    / * =============================创建套接字================= ============ * /
        //创建套接字
        sock_fd =插座(AF_INET,SOCK_STREAM,0);
            如果(sock_fd℃,){
                fprintf中(标准错误,错误创建套接字\\ n);
                出口(1);}        //初始化服务器地址结构体
        bzero((字符*)及serv_addr,* serlen);
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = INADDR_ANY;
        serv_addr.sin_port = 0;    / * =============================绑定地址================= ============= * /        //绑定套接字地址
        如果(绑定(sock_fd,(结构sockaddr *)及serv_addr,* serlen)小于0){
            fprintf中(标准错误,错误的结合\\ n);
            出口(1);}        //获取数据插座
        如果(getsockname(sock_fd,(结构sockaddr *)及serv_addr,serlen)小于0){
            fprintf中(标准错误,错误带插座的名字);
            出口(1);}    / * =============================服务器入门================= =========== * /        //监听连接
        听(sock_fd,32);        //打印端口
        的printf(%i的,serv_addr.sin_port);        conn_fd =接受(sock_fd,(结构sockaddr *)及cli_addr,clilen);        / **做一些令人兴奋的与我的新的连接** /}


解决方案

道具@askmish启发这个

  //打印端口
    的printf(%i的,serv_addr.sin_port);

变为

  //打印端口
    的printf(%i的,htons(serv_addr.sin_port));

Here's the deal, I'm writing a simple tcp socket server in C (with unix system calls) that I'm not able to get to accept connections.

From what I can tell, I get through the server initialization just fine, but when I try to connect to the port that I print out (see code below) it refuses as if nothing is there.

More to the point, when I netstat that port isn't even in use. I'm not throwing any errors with my current set up, I'm all dried up for ideas.

int main(){

    int sock_fd;
    int conn_fd;
    struct sockaddr_in serv_addr;
    struct sockaddr_in cli_addr;
    socklen_t* serlen;
    socklen_t* clilen;
    clilen  = malloc(sizeof(socklen_t));
    serlen  = malloc(sizeof(socklen_t));
    *serlen = sizeof(serv_addr);
    *clilen = sizeof(cli_addr);

    /*=============================Create Socket=============================*/


        //Create Socket
        sock_fd = socket(AF_INET, SOCK_STREAM, 0);
            if(sock_fd<0){
                fprintf(stderr,"error creating socket\n");
                exit(1);}

        //Initialize Server Address Struct
        bzero((char *) &serv_addr, *serlen);
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = INADDR_ANY;
        serv_addr.sin_port = 0;

    /*=============================Bind Address==============================*/

        //Bind socket to an address
        if(bind(sock_fd,(struct sockaddr*)&serv_addr,*serlen)<0){
            fprintf(stderr,"error binding\n");
            exit(1);}

        //Get socket data
        if(getsockname(sock_fd,(struct sockaddr*)&serv_addr, serlen)<0){
            fprintf(stderr,"error with socket name");
            exit(1);}

    /*=============================Server Started============================*/

        //Listen for connections
        listen(sock_fd,32);

        //Print port
        printf("%i", serv_addr.sin_port);

        conn_fd = accept(sock_fd,(struct sockaddr*)&cli_addr,clilen);

        /**Do something exciting with my new connection**/

}

解决方案

props to @askmish for inspiring this one

    //Print port
    printf("%i", serv_addr.sin_port);

becomes

    //Print port
    printf("%i", htons(serv_addr.sin_port));

这篇关于Unix的交流电插座服务器不接受连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆