C/C++教程

TCP-client客户端代码

本文主要是介绍TCP-client客户端代码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

第一版

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>     // 包含套接字函数库
#include <netinet/in.h>     // 包含AF_INET相关结构
#include <arpa/inet.h>      // 包含AF_INET相关操作函数
#include <unistd.h>
#include <stdlib.h>         // exit()

#define PORT 8085

int main(int argc, char *argv[])
{
    int sock_fd;
    int len;
    struct sockaddr_in addr;
    int newsock_fd;
    char * buf = "come on";
    int len2;
    char rebuf[40];

    sock_fd = socket(AF_INET, SOCK_STREAM, 0);  // 创建套接字
    addr.sin_family = AF_INET;                  // 表示TCP/IP协议簇
    // 为什么是本机IP填入到客户端的套接字,客户端需要IP嘛?客户端不需要绑定bind,程序自动分配位占用的端口
    // ---》应该是远端主机的IP地址和端口号,测试是同一台主机,所以填INADDR_ANY
    //addr.sin_addr.s_addr = htonl(INADDR_ANY);   // 32位值从主机字节序转为网络字节序
    addr.sin_addr.s_addr = inet_addr("10.3.119.141");
    addr.sin_port = htons(PORT);                       // 需要连接的端口号
    len = sizeof(addr);                         // 套接字的长度

    // 参数:函数返回的套接字描述符,含远端主机IP和port的指针,远端地址结构的长度
    newsock_fd = connect(sock_fd, (struct sockaddr *)&addr, len);   // 建立连接
    if (newsock_fd == -1)       // 调用失败返回-1
    {
        perror("connect error.\n");
        exit(1);
    }
    else 
    {
        printf("connect OK.\n");
    }
    
    len2 = sizeof(buf);
    // 参数:socket返回的套接字,发送数据的指针,数据程度,默认为0
    send(sock_fd, buf, len2, 0);
    printf("111");
    sleep(5);
    printf("222");
    // 参数:socket返回的套接字,缓冲区指针,缓冲区长度,默认0
    recv(sock_fd, rebuf, 256, 0);   // 256?
    rebuf[sizeof(rebuf) + 1] = '\0';        // 字符串末尾,手动设为0
    printf("receive message:\n%s\n.", rebuf);

    close(sock_fd);
    return 0;
}

第二版

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

int main(int argc, char * argv[])
{
    struct sockaddr_in client_socket;
    int client_fd, client_connect;
    
    /* 创建套接字结构体 */
    client_fd = socket(AF_INET, SOCK_STREAM, 0);
    if (client_fd == -1)
    {
        perror("socket error.\n");
        exit(1);
    }
    else
    {
        printf("socket successfully.\n");
    }

    client_socket.sin_family = AF_INET;
    client_socket.sin_addr.s_addr = inet_addr("10.3.119.141");
    client_socket.sin_port = htons(8080);
    bzero(&(client_socket.sin_zero), 8);

    /* 请求建立连接 */
    client_connect = connect(client_fd, (struct sockaddr *)&client_socket, sizeof(client_socket));
    if (client_connect == -1)
    {
        perror("socket error.\n");
        exit(1);
    }
    else
    {
        printf("connect successfully.\n");
    }

    /* 接受数据 */
    char buf[20]; 
    memset(buf, '0', sizeof(buf));
    recv(client_fd, buf, sizeof(buf), 0);
    printf("MSG:%s", buf);

    /* 发送数据 */
    for (int i = 0; i < 10; i++)
    {
        char str[] = "hello.\n";
        send(client_fd, str, sizeof(str), 0);
        sleep(1);
    }

    /* 关闭客户端 */
    close(client_fd);
    return 0;
}
这篇关于TCP-client客户端代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!