【问题标题】:berkeley sockets, running simple client and server connecting伯克利套接字,运行简单的客户端和服务器连接
【发布时间】:2012-02-10 02:22:15
【问题描述】:

我刚刚开始使用 c 语言进行网络编程。我按照一个简单的教程创建了一个接受连接并打印出客户端发送的消息的服务器。

客户端将参数作为服务器的地址。

我不知道如何指定服务器的地址?是我的机器名吗?

我在一个终端上运行服务器并尝试从另一个终端连接。感谢您的帮助:)

这是服务器代码

   `#include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include<stdio.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>

    int main(int argc, char *argv[])
    {
    #define BUFLEN 1500
    int fd;
    ssize_t i;
    ssize_t rcount;
    char buf[BUFLEN];

    printf("test1");
    fd = socket (AF_INET,SOCK_STREAM,0);
    if (fd == -1){
         printf("Oh dear, something went wrong with read()! %s\n", strerror(errno));
    }

    struct sockaddr_in addr;

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

    if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {
        printf("cannot bind socket");
    }

    if (listen(fd, 20) == -1) {
       printf("unable to listen");
    }

    int connfd; 
    struct sockaddr_in cliaddr; 
    socklen_t   cliaddrlen = sizeof(cliaddr);


    connfd = accept(fd, (struct sockaddr *) &cliaddr, &cliaddrlen);
    if (connfd == -1) {
        printf("unable to accept");
    }




    rcount = read(fd, buf, BUFLEN);
    if (rcount == -1) {

    // Error has occurred
    }
    for (i = 0; i < rcount; i++) { 
        printf("%c", buf[i]);
    }

    }`

【问题讨论】:

  • 哦,哦!我想就是这样,我的连接被拒绝了,但这可能是另一个问题
  • 可能是一样的,能发下相关的服务器代码吗?

标签: c macos sockets network-programming client-server


【解决方案1】:
printf("test1");

您应该在打印字符串的末尾添加“\n”(换行符),以便立即打印。如果没有“\n”,printf() 会缓冲它的输出,而你看不到它们。

addr.sin_port = htons(500);

端口 0 - 1023 被称为“众所周知的端口”并保留给系统(根)。对于这样的测试程序,您应该使用端口 1024 或更大。将其从 500 更改为 1500(例如)绑定成功。 (您看不到错误消息“无法绑定套接字”,因为它没有“\n”,正如我上面所说的。)

rcount = read(fd, buf, BUFLEN);

您应该从 connfd 中读取,而不是 fd。通过这些更改,它对我有用。 (我使用“telnet localhost 1500”作为客户端。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2021-03-31
    • 2020-05-24
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多