UDP发送实现过程
服务器端:
1,创建socket;
2,配置并绑定地址/端口;
3,与通讯对象建立连接并发送;
4,断开连接
客户端:
1,创建socket;
2,发送数据;
3,断开连接
1.创建socket
(1)使用socket函数,socket(组,传输类型,协议);
(2)组包括: (目前使用AF_INET)
AF_INET(IPv4),AF_INET6(IPv6);
(3)传输类型: (目前实现UDP使用SOCK_DGRAM)
SOCK_STREAM:双向可靠字节流;
SOCK_DGRAM:支持无连接,不可靠传输;
(4)协议: 一个组只有一种协议,所以为0;
2.配置并绑定地址/端口
(1)使用结构体sockaddr_in配置地址/端口
头文件为: <netinet/in.h>
struct sockaddr_in {
__kernel_sa_family_t sin_family;
__be16 sin_port;
struct in_addr sin_addr;
unsigned char __pad[__SOCK_SIZE__ - sizeof(short int) -
sizeof(unsigned short int) - sizeof(struct in_addr)];
};
//family --> AF_INEF;
//port --> htons(PORT);
//sin_addr.addr --> inet_addr(IP);
(2)使用bind绑定端口/地址
3.与通讯对象建立连接并传输
(1)发送
sendto():在函数中指定目的地址/端口并发送
send():前面使用connect()函数指定目的地址/端口,然后发送
(2)接收
recvfrom():在函数中指定源地址/端口并接收
recv():先使用connect()函数指定源端口,然后接收
函数说明
socket():
//头文件为<sys/types.h> <sys/socket.h>
//--创建socket网络套接字
htons()
ntohs():
//头文件为<arpa/inet.h>
//htons--将16位整型的主机字节顺序转为网络字节顺序
//ntohs--将16位网络字节顺序转为主机字节顺序;
inet_addr()
inet_ntoa():
//头文件为<sys/socket.h> <netinet/in.h> <arpa/inet.h>
//inet_addr--将字符型转为32位的网络IP;
//inet_nota--将32位网络字节的IP转为对应的字符串IP
inet_ntoa():
//
bind():
//头文件为<sys/types.h> <sys/socket.h>
//--将为本地绑定网络端口和地址
connect():
//头文件为<sys/types.h> <sys/socket.h>
//--和客户端建立连接
send()
sendto():
//头文件为<sys/types.h> <sys/socket.h>
//send通过socket发送数据
//sendto 与客户端建立连接并发数据
recv()
revcfrom():
//头文件为<sys/types.h> <sys/socket.h>
//recv从socket接收数据
//recvfrom与服务端建立建立并接收数据