UDP协议服务器、客户端使用实例Demo
2017-07-29 12:16
417 查看
服务器:
客户端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #define MAXSIZE 512 #define SERVER_PORT 12355 #define SEND_PORT 12377 int main() { struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len; char buff[MAXSIZE]; char ip[INET_ADDRSTRLEN]; int i, len; /*创建socket*/ int sockfd = socket(AF_INET, SOCK_DGRAM, 0); /*设置广播属性*/ int on = 1; setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on)); /*绑定端口号*/ bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(SERVER_PORT); bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); printf("Udp Server Start ...\n"); while(1) { /*接收客户端信息*/ client_addr_len = sizeof(client_addr); len = recvfrom(sockfd, buff, MAXSIZE, 0, (struct sockaddr*)&client_addr, &client_addr_len); if(len == -1) { printf("recvfrom error\n"); } /*打印客户端ip,port*/ inet_ntop(AF_INET, &client_addr.sin_addr, ip, sizeof(ip)); int rcv_port = ntohs(client_addr.sin_port); printf("Received info from %s at PORT %d\n",ip,rcv_port); for(i = 0; i < len; i++) { buff[i] = toupper(buff[i]); } /*设置发送端口*/ client_addr.sin_port = htons(SEND_PORT); /*发送信息到客户端*/ len = sendto(sockfd, buff, len, 0, (struct sockaddr*)&client_addr, sizeof(client_addr)); if(len == -1) { printf("sendto error!\n"); } } close(sockfd); return 0; }
客户端:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #define MAXSIZE 512 #define SERVER_PORT 12355 #define RECV_PORT 12377 #define IP "255.255.255.255" int main(int argc, char* argv[]) { char buff[MAXSIZE]; /*创建socket,设置广播属性*/ int sockfd = socket(AF_INET, SOCK_DGRAM, 0); int on = 1; setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on)); /*绑定接收端口*/ struct sockaddr_in rcv_addr; bzero(&rcv_addr, sizeof(rcv_addr)); rcv_addr.sin_family = AF_INET; inet_pton(AF_INET, "127.0.0.1", &rcv_addr.sin_addr); rcv_addr.sin_port = htons(RECV_PORT); bind(sockfd,(struct sockaddr*)&rcv_addr,sizeof(rcv_addr)); /*设置发送到服务器的IP,端口等信息*/ struct sockaddr_in server_addr; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; inet_pton(AF_INET, IP, &server_addr.sin_addr); server_addr.sin_port = htons(SERVER_PORT); printf("Udp Client Start....\n"); while(fgets(buff, MAXSIZE, stdin) != NULL) { /*发送信息到服务器*/ int ret = sendto(sockfd, buff, strlen(buff), 0, (struct sockaddr*)&server_addr, sizeof(server_addr)); if(-1 == ret) { printf("sendto error!\n"); } /*接收服务器返回信息*/ ret = recvfrom(sockfd, buff, MAXSIZE, 0, NULL, 0); if(-1 == ret) { printf("recvfrom error!\n"); } write(STDOUT_FILENO, buff, ret); } close(sockfd); return 0; }
相关文章推荐
- 客户端服务器通信demo(续) -- 使用二进制协议 (附源码)
- loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
- linux udp协议服务器,客户端socket使用
- java使用UDP协议进行服务器客户端通信
- netty 3.9.2 UDP协议服务器和客户端DEMO
- 基于UDP协议的服务器/客户端程序
- loadunner使用socket协议来实现多客户端连接同一服务器脚本(使用到IP欺骗技术)
- 使用HttpClientdopost编写 客户端、服务器与数据库Demo
- 网络编程(5)—— 基于Linux系统的UDP协议socket服务器和客户端
- 浅谈java中udp服务器客户端实例
- 实现UDP协议,socket编程,调用到windowsAPI,实现客户端和服务器
- QUdpSocket简单使用Demo(局域网内发送给所有客户端消息与接收)
- eMule协议规范 附录 A - 消息编码 客户端服务器UDP消息
- 网络编程(6)—— 基于Windws系统的UDP协议socket服务器和客户端
- Java多线程UDP客户端与服务器间使用Socket通信
- 基于UDP协议的服务器/客户端程序
- Qt中UDP协议的使用实例
- Windows Socket UDP协议(服务器与客户端)
- eMule协议规范 第三章 客户端服务器的UDP交流
- 服务器 libevent中epoll使用实例demo