美文网首页
socket编程03: 一个简单的TCP客户端程序

socket编程03: 一个简单的TCP客户端程序

作者: 赵伯舟 | 来源:发表于2018-09-06 16:11 被阅读9次

    TCP客户端程序

    此客户端程序(client_v1.cpp)功能是从命令行参数中获得一个字符串发给服务器,然后接收服务器返回的字符串并打印:

    //client_v1.cpp
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <cstdlib>
    #define MAXLINE 80
    #define SERV_PORT 8000
    
    int main(int argc, char *argv[])
    {
        struct sockaddr_in servaddr;
        char buf[MAXLINE];
        int sockfd, n;
        char *str;
        if (argc != 2)
        {
            fputs("usage: ./client message\n", stderr);
            exit(1);
        }
        str = argv[1];
    
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family = AF_INET;
        inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
        servaddr.sin_port = htons(SERV_PORT);
    
        connect(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr));
    
        write(sockfd, str, strlen(str));
    
        n = read(sockfd, buf, MAXLINE);
        printf("Response from server:\n");
    
        write(STDOUT_FILENO, buf, n);
        close(sockfd);
    
        return 0;
    }
    

    由于客户端不需要固定的端口号,因此不必调用bind(),客户端的端口号由内核自动分配。注意,客户端不是不允许调用bind(),只是没有必要调用bind()固定一个端口号
    在客户端程序中用到的新的API是connect()

    int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen);
    

    connect和bind的参数形式一致,区别在于bind的参数是自己的地址,而connect的参数是对方的地址。 connect()成功返回0,出错返回-1

    相关文章

      网友评论

          本文标题:socket编程03: 一个简单的TCP客户端程序

          本文链接:https://www.haomeiwen.com/subject/vfcxgftx.html