C语言 网络编程socket服务端TCP连接创建

C语言 网络编程socket服务端TCP连接创建_第1张图片

客户端连接创建:

        

C语言 网络编程socket服务端TCP连接创建_第2张图片

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
void *read_msg(void *arg);
void *read_msg(void *arg)
{
    int fb = *((int *)arg);
    char msg[1024];
    while (1)
    {
        memset(msg, 0, strlen(msg));
        read(fb, msg, sizeof(msg));
        printf("收到消息:%s\n", msg);
    }
}

int main(int argc, char const *argv[])
{
    // 创建客户端对象-------------------
    int fb = socket(AF_INET, SOCK_STREAM, 0);
    if (fb < 0)
    {
        perror("socket");
        return 0;
    }
    // int socket_family:AF_INET IP用的是IPV4    AF_IPX:IPV6
    // man 7 ip 查看IP
    // NAME
    //        ip - Linux IPv4 protocol implementation
    // SYNOPSIS
    //        #include 
    //        #include 
    //        #include  /* superset of previous */

    //        tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
    //        udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
    //        raw_socket = socket(AF_INET, SOCK_RAW, protocol);
    // int socket_type:  SOCK_STREAM  TCP协议    SOCK_DGRAM:UDP协议

    // 连接服务器----------------------------
    // man connect
    //  NAME
    //         connect - initiate a connection on a socket

    // SYNOPSIS
    //        #include           /* See NOTES */
    //        #include 

    //        int connect(int sockfd, const struct sockaddr *addr,
    //                    socklen_t addrlen);
    //        int sockfd:                               客户端对象的fb
    //        const struct sockaddr *addr:              服务器地址
    //         socklen_t addrlen                        服务器地址长度
    //         成功返回:0  失败返回:-1;
    //------------------------------------------------------------------
    //        struct sockaddr
    //          {
    //            sa_family_t sa_family;	            无符号短整型 16位 表示IP协议
    //            char sa_data[14];		                数据ip地址 + 端口号
    //          };
    //------------------------------------------------------------------
    //        struct sockaddr_in
    //        {
    //            sa_family_t sin_family;               无符号短整型 16位 表示IP协议 /* address family: AF_INET */
    //                in_port_t sin_port;               端口号 16位                  /* port in network byte order */
    //                struct in_addr sin_addr;          32位 IP地址      /* internet address */
    //        };
    //-------------------------------------------------------------------
    //        struct in_addr
    //        {
    //            uint32_t s_addr; /* address in network byte order */
    //        };
    //------------------------------------------------------------------
    struct sockaddr_in addr;                            // 定义结构体
    addr.sin_family = AF_INET;                          // 设置为IPV4
    addr.sin_port = htons(8080);                        // 设置端口号为8080  htons():将本地网络字序改为网络传输统一的大端存储的字序
                                                        // ntohs() 将网络字序转化为本地主机字序
    addr.sin_addr.s_addr = inet_addr("192.168.11.178"); // 设置网络IP    inet_addr():将字符串转化为整型地址

    if (connect(fb, (struct sockaddr *)&addr, sizeof(addr)))
    {
        perror("connect");
    }
    pthread_t id;
    pthread_create(&id, NULL, read_msg, (void *)&fb);
//进行通信-----------------------------------
    int op;
    char msg[1024];
    while (1)
    {
        printf("请选择操作\n");
        printf("1、退出\n");
        printf("2、发送消息\n");
        scanf("%d", &op);
        if (op == 1)
        {
            pthread_cancel(id);
            pthread_join(id, NULL);
            break;
        }
        if (op == 2)
        {
            memset(msg, 0, sizeof(msg));
            getchar();
            printf("请输入信息内容:");
            scanf("%s", msg);
            write(fb, msg, strlen(msg));
        }
    }
//关闭
    close(fb);

    return 0;
}

C语言 网络编程socket服务端TCP连接创建_第3张图片

 

你可能感兴趣的:(C语言,网络,tcp/ip,服务器,c语言,网络协议)