1、udp通信
特点:(1)无连接
(2)不可靠
2、udp编程(c/s模型)
ssize_t recvfrom(int sockfd, //socket的fd
void *buf, //保存数据的一块空间的地址
size_t len, //这块空间的大小
int flags, // 0 默认的接收方式 --- 阻塞方式
struct sockaddr *src_addr, //用来保存发送方的地址信息
socklen_t *addrlen //表示发送方实际的地址信息大小
);
绑定
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
发送
ssize_t sendto( int sockfd, //用于通信的socket对应的fd
const void *buf, //表示要发送的数据所在的一块空间
size_t len, //表示发送的字节数
int flags, //0 --- 默认
const struct sockaddr *dest_addr, //表示 要发送到的 地址 (网络地址 ip+端口号 )
socklen_t addrlen //表示dest_addr 这个参数的长度
);
int main(int argc, const char *argv[])
{
int fd = socket(AF_INET,SOCK_DGRAM,0);
if (fd < 0)
{
perror("socket fail");
return -1;
}
printf("fd = %d\n",fd);
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(50000);
seraddr.sin_addr.s_addr = inet_addr("192.168.147.1");
if(bind(fd, (struct sockaddr *)&seraddr,sizeof(seraddr)) < 0)
{
perror("bind fail");
return -1;
}
struct sockaddr_in srcaddr;
socklen_t addrlen = sizeof(srcaddr);
char buf[1024];
while(1)
{
recvfrom(fd,buf,sizeof(buf),0,(struct sockaddr*)&srcaddr, &addrlen);
printf("---------------------------\n");
printf("IP = %s\n", inet_ntoa(srcaddr.sin_addr));
printf("post = %d\n", ntohs(srcaddr.sin_port));
printf("buf = %s\n", buf);
printf("---------------------------\n");
}
return 0;
3、tcp编程
(1)三次握手
(2)四次回收
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
功能:该函数固定有客户端使用,表示从当前主机向目标
主机发起链接请求。
参数:sockfd 本地socket创建的套接子id
addr 远程目标主机的地址信息。
addrlen: 参数2的长度。
返回值:成功 0
失败 -1;
int listen(int sockfd, int backlog);
tcp回发