服务器端
1、创建套接字
#include <sys/socket.h>
int socket(int domain,int type,int protocol)
domain:协议族 PF_INET/PF_INET6
type:数据传输方式 SOCK_STRRAM/SOCK_DGRAM
protocol;具体指定协议信息 IPPROTO_TCP
2、分配ip地址和端口号
#include <sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen)
sockfd:要分配地址的套接字文件描述符
myaddr:存有地址信息的结构体变量地址
addrlen:第二个结构体变量的长度
struct sockaddr
{
sa_family_t sin_family;
char sa_data[14];
}
需要进行地址转换
struct sockaddr_in
{
sa_family_t sin_family;
uint16_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
}
struct in_addr
{
in_addr_t s_addr;
}
3、设置套接字为可接收状态
#include <sys/socket.h>
int listen(int sock,int backlog)
sock:希望进入连接请求的套接字文件描述符
backlog:队列长度
4、受理连接请求
#include <sys/socket.h>
int accept(int sock,struct sockaddr *addr,socklen_t *addrlen)
sock 服务器套接字文件描述符
addr:保存客户端地址信息的变量地址
addrlen:第二个参数addr结构体长度
客户端
1、创建套接字
#include <sys/socket.h>
int socket(int domain,int type,int protocol)
2、发送连接请求
#include <sys/socket.h>
int connect(int sockfd,struct sockaddr *serv_addr,socklen_t addrlen)
sock 客户端套接字描述符
servaddr 保存目标服务器地址
addrlen:第二个结构体参数的值
客户端的ip地址调用connect函数自动分配
文件操作
1、将数据写入文件
#include <inistd.h>
ssize_t write(int fd,const void* buf,size_t nbytes)
2、读取文件中的数据
#include <inistd.h>
ssize_t read(int fd,void* buf,size_t nbytes)
基于udp的数据io函数
#include <sys/socket.h>
ssiz_t sendto(int sock,void *buff,size_t nbytes,int flags,struct sockaddr *to,socklen_t addrlen)
sock 传输udp套接字的文件描述符
buff 保存待传输数据的缓冲地址值
nbytes 数据长度
to 存有目标地址的值
addlen to变量长度
客户端调用sento函数自动分配ip地址和端口号
ssize_t recvfrom(int sock,void *buff,size_t nbytes,int flags.struct sockaddr *from,socklen_t *addrlen)
sock:接收udp套接字文件描述符
buff 保存地址
nbytes 可接受的最大字节数
from 发送端地址信息
addrlen from变量地址长度
|