欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TCP 客户端简单通信流程

程序员文章站 2022-06-05 20:59:09
...

一 、创建 TCP 套接字

socket 函数创建套接字 , 与UDP套接字的区别 : type 更换为 SOCK_STREAM

    int sockfd=socket(AF_INET,SOCK_STREAM,0);
    if(sockfd<0)
    {
        printf("socket error\n");
        return 0;
    }

二 、连接服务器

connect 函数主动跟服务器连接

int connect(int sockfd, const struct sockaddr *addr, socklen_t len);
参数:
sockfd:socket 套接字
addr: 连接的服务器地址结构
len:
地址结构体长度
返回值:
成功:0 失败:其他
注意:
1、connect 建立连接之后不会产生新的套接字
2、连接成功后才可以开始传输 TCP 数据
3、头文件:#include <sys/socket.h>
    struct sockaddr_in server_addr;
    bzero(&server_addr,sizeof(server_addr));
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(8080);
    inet_pton(AF_INET,"10.36.145.87",&server_addr.sin_addr);//点分十进制转到IP
    
    int ret =connect(sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr));//套接字;地址结构体(通用类型);地址大小
    if(ret!=0)
    {
        printf("connect error!\n");
        return 0;
    }
    printf("connect succeed\n");

三 、发送数据

send 函数发送数据

ssize_t send(int sockfd, const void* buf,size_t nbytes, int flags);
参数:
sockfd: 已建立连接的套接字
buf:
发送数据的地址
nbytes: 发送缓数据的大小(以字节为单位)
flags:
套接字标志(常为 0)
返回值:
成功发送的字节数
头文件:
#include <sys/socket.h>
注意:
不能用 TCP 协议发送 0 长度的数据包
send(sockfd,"Hi Siri",sizeof("Hi Siri"),0);

四 、接收数据

recv 函数接收数据

ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags);
参数:
sockfd:套接字
buf: 接收网络数据的缓冲区的地址
nbytes: 接收缓冲区的大小(以字节为单位)
flags:
套接字标志(常为 0)
返回值:
成功接收到字节数
头文件:
#include <sys/socket.h>
    char  buf[512]="";
    recv(sockfd,buf,sizeof(buf),0);
    printf("recv==%s\n",buf);

 

相关标签: udp linux