UDP通信client端和server端
2016-05-10 21:14
253 查看
client端:
#include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char **argv) { char buff[512]; printf("This is a UDP client\n"); struct sockaddr_in addr; int sock; if ( (sock=socket(AF_INET, SOCK_DGRAM, 0)) <0) { perror("socket"); exit(1); } addr.sin_family = AF_INET; addr.sin_port = htons(3702); addr.sin_addr.s_addr = inet_addr("49.123.73.201"); if (addr.sin_addr.s_addr == INADDR_NONE) { printf("Incorrect ip address!"); close(sock); exit(1); } while (1) { /* 接受用户输入 */ bzero(buff, 512); if (fgets(buff, 511, stdin) == (char *) EOF)//从键盘输入内容 exit(0); if( sendto(sock, buff, strlen(buff), 0, (struct sockaddr *)&addr, sizeof(addr)) < 0){ perror("sendto"); close(sock); break; }else{ printf("clinet send success!\n"); } } return 0; }server端
#include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char **argv) { printf("Welcome! This is a UDP server, I can only received message from client and reply with same message\n"); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(3702); addr.sin_addr.s_addr = htonl(INADDR_ANY); int sock; if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } char buff[512]; struct sockaddr_in clientAddr; int n; int len = sizeof(clientAddr); while (1) { n = recvfrom(sock, buff, 511, 0, (struct sockaddr*)&clientAddr, &len); if (n>0) { buff = 0; printf("%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff); n = sendto(sock, buff, n, 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)); if (n < 0) { perror("sendto"); break; } } else { perror("recv"); break; } } return 0; }
相关文章推荐
- 栈
- [ubuntu14.04.4]安装Docker
- Android应用程序(APK)的编译打包过程
- 赋值运算与位运算
- Ext中关于Ext.QuickTips.init()的使用
- 使用fdisk命令对linux硬盘进行操作
- 常用的sql语句优化
- 图像特效---(Punch Filter)交叉冲印滤镜
- 65-Binary Tree Zigzag Level Order Traversal
- HDU 1004 Let the Balloon Rise【水题】
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
- Android代码生成器使用说明
- java的String类中的null和isEmpty()的区别
- android图片三级缓存
- 122 - Trees on the level(动态分配空间解法)
- servlet session跟踪实践
- 4、关于HashMap在多线程下的不安全分析
- 2016-05-10
- C++实现数组中出现最频繁的前top k个元素
- Eclipse的"Android sdk manager"中安装了指定版本的系统(或指定API版本),为什么在run as Android Applicantion中新建虚拟机时,target中找不到