首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C套接字程序不打印所需的输出(无错误)

C套接字程序不打印所需的输出(无错误)
EN

Stack Overflow用户
提问于 2018-06-08 21:53:45
回答 1查看 194关注 0票数 -1

我似乎不能打印我在客户中输入的内容。我已经编译了这两个,没有任何错误。我不知道为什么它不能打印所需的输出。

问:我的代码出了什么问题?如何通过服务器中的客户端打印带有空格的字符串。

以下是服务器的代码。

代码语言:javascript
复制
/* Server Side program */


    int sid,nid;
    struct sockaddr_in q;
    char x[100];

    int len=sizeof(struct sockaddr_in);

    sid=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
    q.sin_family=PF_INET;
    q.sin_port=1600;
    q.sin_addr.s_addr=0;

    bind(sid,&q,len);

    listen(sid,20);

    while(1)
    {
            memset(x,0,sizeof(x));
            nid=accept(sid,&q,&len);
            read(nid,x,100);
            printf("%s\n",x);

    }

以下是客户端的代码。

代码语言:javascript
复制
/*client side program*/


    int sid,status;
    struct sockaddr_in q;
    int len=sizeof(struct sockaddr_in);
    char x[100];

    sid=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
            q.sin_family=PF_INET;                   
            q.sin_port=1600;                        
            q.sin_addr.s_addr=0;                  
    status=connect(sid,&q,len);
    if(status==-1)
    {
            printf("Connection failure");
            exit(0);
    }

    while(1)
    {
            printf("Enter string to send : ");
            scanf("%[^\n]s",x);
            write(sid,x,strlen(x));
            if(strcmp(x,"bye")==0)
                     break;

    }
EN

回答 1

Stack Overflow用户

发布于 2018-06-09 05:06:24

你的代码有各种各样的问题。缺少错误处理。不正确地使用printf()scanf()。资源泄漏。

试试更多像这样的东西:

服务器:

代码语言:javascript
复制
int main()
{
    int sid, nid;
    struct sockaddr_in q;
    char x[100];
    socklen_t qlen;
    ssize_t xlen;

    sid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sid < 0)
    {
        perror("socket failure");
        return -1;
    }

    q.sin_family = AF_INET;
    q.sin_port = htons(1600);
    q.sin_addr.s_addr = INADDR_ANY;

    if (bind(sid, &q, sizeof(q)) < 0)
    {
        perror("bind failure");
        return -1;
    }

    if (listen(sid, 20) < 0)
    {
        perror("listen failure");
        return -1;
    }

    while(1)
    {
        qlen = sizeof(q);
        nid = accept(sid, &q, &qlen);
        if (nid < 0)
        {
            perror("accept failure");
            return -1;
        }

        while ((xlen = read(nid, x, sizeof(x))) > 0)
        {
            printf("Received: '%.*s'\n", xlen, x);
        }

        if (xlen < 0)
            perror("read failure");
        else
            printf("client disconnected\n");

        close(nid);
    }

    return 0;
}

客户端:

代码语言:javascript
复制
int main()
{
    int sid, xlen;
    struct sockaddr_in q;
    char x[100];

    sid = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sid < 0)
    {
        perror("socket failure");
        return -1;
    }

    q.sin_family = AF_INET;                   
    q.sin_port = htons(1600);
    q.sin_addr.s_addr = inet_addr("server ip here"); // or INADDR_LOOPBACK (127.0.0.1)

    if (connect(sid, &q, sizeof(q)) < 0)
    {
        printf("connect failure");
        return -1;
    }

    while(1)
    {
        printf("Enter string to send : ");
        if (!fgets(x, sizeof(x), stdin))
            break;

        xlen = strlen(x);
        if ((xlen > 0) && (x[xlen-1] == '\n'))
        {
            x[xlen-1] = '\0';
            --xlen;
        }

        if (write(sid, x, xlen) < 0)
        {
            perror("write failure");
            break;
        }

        if (strcmp(x, "bye") == 0)
            break;
    }

    close(sid);

    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50762216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档