一、TCP的编程
TCP服务器:
头文件:sys/types.h sys/socket.h
1、创建套接字:int socket(int domain,int type,int protocol)
第一个参数:IPv4使用AF_INET ;第二个参数:TCP使用SOCK_STREAM;第三个参数:0表示选择默认协议。
2、绑定套接字:int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen);
第一个参数sockfd为创建的套接字,第二个参数为绑定的参数,第三个参数为addr的长度
一般使用struct sockaddr_in代替struct sockaddr,初始化如下:
struct sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);//接收所有的连接
addr.sin_port=htons(5000); //绑定的端口号
3、设置套接字监听:int listen(int sockfd,int backlog)
backlog为连接请求队列的最大长度
4、接收连接 int accept(in sockfd,struct sockaddr *addr,socklen_t *addrlen)
5、发送和接收信息:(也可以用read和write)
ssize_t send(int sockfd,const void *buf,size_t len,int flags)
ssize_t recv(int sockfd,void *buf,size_t len,int flags)
flags一般为0;
recv的flags值:MSG_DONTWAIT仅本操作非阻塞;MSG_OOB发送或接收带外数据;MSG_PEEK窥看外来消息;MSG_WAITALL等待所有数据
send的flags值:MSG_DONTROUTE绕过路由表查找;MSG_DONTWAIT仅本操作非阻塞;MSG_OOB发送或接收带外数据
6、关闭套接字 int close(int fd) 头文件unistd.h
TCP客户端:
1、创建套接字
2、连接服务器:int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen)
3、发送和接收数据:(recv和send)
4、关闭套接字
二、UDP的编程
UDP服务器:
1、创建套接字:第二个参数为SOCK_DGRAM
2、绑定套接字
3、发送和接收数据(recvfrom和sendto)
ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen)
ssize_t sendto(int sockfd,const void *buf,size_t len,int flags,struct sockaddr *dest_addr,socklen_t *addrlen)
4、关闭套接字(close)
UDP客户端:
1、创建套接字
2、发送和接收数据:服务器的参数放到函数sendto的参数中
3、关闭套接字