【清空】

memset()
bzero() (不推荐使用

【TCP】

connect()

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

功能:

发起与服务器的连接请求

参数:

  1. **sockfd:**套接字<br /> **addr:**结构体指针,填充的地址信息是服务器的<br /> **addrlen:**结构体变量的长度

返回值:

成功:0
失败:-1

send()

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

功能:

向目标发送数据

参数:

  1. **sockfd:**套接字<br /> **buf:**存放数据的空间地址<br /> **len:**发送数据的长度<br /> **flag:**默认填0

返回值:

成功:返回发送数据的长度
失败:返回-1

任务1:
客户端给服务器发送一串字符串,服务器给客户端回复一个字符串!,客户端接收到消息并打印
cli:“nihao”
ser:“nihao!”->cli
cli:”nihao!

sprintf()
strcat()

任务2:实现服务器和客户端的全双工通信
多进程,子进程负责接收消息,父进程负责发送消息

优化:

1.填充结构体时:

  1. sin_port = htons(atoi(argv[2]));<br /> sin_addr.s_addr = inet_addr(argv[1]);**或**sin_addr.s_addr = htonl(INADDR_ANY);

2.再填充服务器IP时:

INADDR_ANY可以自动匹配本机地址,
只能用于服务器

【UDP】

流程:

server:

  1. **1.**socket()<br /> **2.**bind()<br /> **3.**recvfrom()<br /> **4.**sendto()<br /> **5.**close

client:

  1. **1.**socket()<br /> **2.**填充地址结构体<br /> **3.**sendto()<br /> **4.**recvfrom()<br /> **5.**close

recvfrom():

ssize_t recvfrom(int sockfd, void buf, size_t len, int flags,struct sockaddr src_addr, socklen_t *addrlen);

功能:

接收数据

参数:

  1. **sockfd:**套接字<br /> **buf:**存放数据的空间地址<br /> **len:**理论接收数据长度<br /> **flags:**0<br /> **src_addr:**发送方的地址信息结构体指针<br /> **addrlen:**结构体长度指针

返回值:

>0:接收的实际长度
==0:客户端退出
<0:错误

sento():

ssize_t sendto(int sockfd, const void buf, size_t len, int flags,const struct sockaddr dest_addr, socklen_t addrlen);

功能:

向指定IP位置发送数据

参数:

sockfd:套接字
buf:存放数据的空间地址
len:理论接收数据长度
flags:0
src_addr:发送方的地址信息结构体指针
addrlen:结构体长度

返回值:

成功:返回发送的长度
失败:-1

strncmp(buf,“quit”,4)==0
break;

  1. <br />