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);
上一篇: Ubuntu 18.04增加Swap空间
下一篇: Ubuntu 18.04 更换apt源