Linux里UDP协议 广播和接收测试 C语言
来源:互联网 发布:cmd telnet 端口 编辑:程序博客网 时间:2024/05/19 08:42
UDP协议是面向无连接的,和TCP比起来少了繁琐的三次握手,但是在安全性上没有保障,不过对于聊天来说一般都是用的这个,下面是一个测试UDP协议的简单实验:
server:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h> //socket() #include <netinet/in.h> // inet_addr()#include <arpa/inet.h>#include <unistd.h> // read()/ write#include <errno.h>extern int errno;int main(int argc, char *argv[]){ int fd = socket(AF_INET, SOCK_DGRAM, 0); fprintf(stderr, "socket id = %d\n", fd); // 地址复用 int on = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); struct sockaddr_in servaddr; servaddr.sin_family = AF_INET; if(argc == 2) servaddr.sin_port = htons(atoi(argv[1])); else servaddr.sin_port = htons(8877); servaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 0.0.0.0 //servaddr.sin_addr.s_addr = htonl(127.0.0.1); // 0.0.0.0 int ret = bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(ret < 0) { fprintf(stderr, "error:%s\n", strerror(errno)); close(fd); return -1; } struct sockaddr_in peer; // 保存对方的地址信息 socklen_t size; char buff[1024]; int cnt; char ip[16]; while(1) { bzero(&peer, sizeof(peer)); size = sizeof(peer); //recv cnt = recvfrom(fd, buff, 1024, 0, (struct sockaddr *)&peer, &size); printf("ip:%s, port:%d\n", inet_ntoa(peer.sin_addr), ntohs(peer.sin_port)); inet_ntop(AF_INET, &(peer.sin_addr), ip, 16); printf("ip:%s, port:%d\n", ip, ntohs(peer.sin_port)); printf("recv: %s\n", buff); if(cnt <= 0) fprintf(stderr, "recv error or end\n"); else sendto(fd, buff, cnt, 0, (struct sockaddr *)&peer, sizeof(peer)); } close(fd); return 0;}
broad:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<unistd.h>#include<errno.h>int main(int argc,char *argv[]){ int fd = socket(AF_INET,SOCK_DGRAM,0); int on = 1; setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)); int br =1; setsockopt(fd,SOL_SOCKET,SO_BROADCAST,&br,sizeof(br)); struct sockaddr_in broadcast; broadcast.sin_family = AF_INET; broadcast.sin_port = htons(8877); broadcast.sin_addr.s_addr = inet_addr("255.255.255.255"); char *pts = "Dge"; while(1) { sendto(fd,pts,strlen(pts)+1,0,(struct sockaddr *)&broadcast,sizeof(broadcast)); sleep(1); } close(fd); return 0;}
0 0
- Linux里UDP协议 广播和接收测试 C语言
- C语言socket UDP广播的发送和接收示例
- UDP协议发送、接收广播包 .
- linux下使用C语言接收和发送udp组播数据分别怎么写?
- Android发送和接收UDP广播
- LINUX C UDP协议
- C#UDP的多路广播组的发送和接收
- C#UDP的多路广播组的发送和接收
- C#UDP的多路广播组的发送和接收
- C#UDP的多路广播组的发送和接收
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux系统下UDP发送和接收广播消息小例子
- Linux UDP下C语言实现TFTP协议客户端
- Java-同步
- js中SetInterval与setTimeout用法
- 如何长久维持远距离恋情?
- hdu2688 Rotate(树状数组)
- 黑马程序员——异常&IO、其他流&编码表、Properties
- Linux里UDP协议 广播和接收测试 C语言
- HDOJ 1232 畅通工程 (并查集)
- MVVM
- wps for linux 不能使用中文输入法
- Android性能优化典例(一)
- 用processing和openNI画出骨骼识别深度图
- linux中的块缓冲
- poj 3268
- JSP——>JSTL入门专用