【清空】
【TCP】
connect()
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:
参数:
**sockfd:**套接字<br /> **addr:**结构体指针,填充的地址信息是服务器的<br /> **addrlen:**结构体变量的长度
返回值:
send()
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
功能:
参数:
**sockfd:**套接字<br /> **buf:**存放数据的空间地址<br /> **len:**发送数据的长度<br /> **flag:**默认填0
返回值:
成功:返回发送数据的长度
失败:返回-1
任务1:
客户端给服务器发送一串字符串,服务器给客户端回复一个字符串!,客户端接收到消息并打印
cli:“nihao”
ser:“nihao!”->cli
cli:”nihao!“
sprintf()
strcat()
任务2:实现服务器和客户端的全双工通信
多进程,子进程负责接收消息,父进程负责发送消息
优化:
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时:
【UDP】
流程:
server:
**1.**socket()<br /> **2.**bind()<br /> **3.**recvfrom()<br /> **4.**sendto()<br /> **5.**close
client:
**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);
功能:
参数:
**sockfd:**套接字<br /> **buf:**存放数据的空间地址<br /> **len:**理论接收数据长度<br /> **flags:**0<br /> **src_addr:**发送方的地址信息结构体指针<br /> **addrlen:**结构体长度指针
返回值:
sento():
ssize_t sendto(int sockfd, const void buf, size_t len, int flags,const struct sockaddr dest_addr, socklen_t addrlen);
功能:
参数:
sockfd:套接字
buf:存放数据的空间地址
len:理论接收数据长度
flags:0
src_addr:发送方的地址信息结构体指针
addrlen:结构体长度
返回值:
成功:返回发送的长度
失败:-1
strncmp(buf,“quit”,4)==0
break;
<br />
