一、 将多进程和网络通讯结合
用多进程实现为多个客户服务的例子
在服务器为每个客户创建一个进程,这个进程负责和客户的通讯
fork()
子进程负责和客户端的通讯,父进程负责监听
二、 基于UDP编程
TCP提供面向连接的服务,保证数据传输的可靠性、传输数据的有序性、流量控制、全双工
主要用于传输文件 效率低
UDP提供不面向连接的服务,不提供客户机与服务器的连接
步保证数据传输的可靠性 也是全双工
主要用于传输图片和视频 效率高
a) 基于UDP实现服务器端
第一步:创建socket
第二步:bind将fd和目标地址绑定
第三步:recvfrom阻塞等待客户端的请求
recvfrom(2)
#include<sys/types.h>
#include<sys/socket.h>
ssize_trecvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr*src_addr, socklen_t *addrlen);
功能:从socket接受数据
参数:
sockfd:socket(2)返回值
buf:存放数据的内存的地址
len:从buf地址开始的字节数
flags:0
src_addr:数据发送者的ip地址和端口号
addrlen:发送者地址的长度
返回值:
接收到的字节数
-1表示错误
第四步:数据处理
第五步:给客户端发送应答数据
sendto(2)
#include<sys/types.h>
#include<sys/socket.h>
ssize_tsendto(int sockfd, const void *buf, size_t len, int flags, const structsockaddr *dest_addr, socklen_t addrlen);
功能:通过socket传输数据
参数:
sockfd:
buf:
b) 基于UDP实现客户端
第一步:创建一个socket
第二步:直接给服务器发送数据请求
第三步:阻塞等待服务器的应答
第四步:关闭文件描述符
举例:vi udpserv.c
1 #include<stdio.h>
2 #include<sys/types.h>