Linux 网络编程六(socket通信UDP版)
2016-09-19 13:24
706 查看
//udp接收消息 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int arg, char * args[]) { if (arg < 3) { printf("please print two param!\n"); return -1; } int port = atoi(args[2]); //create socket int st = socket(AF_INET, SOCK_DGRAM, 0); if (st == -1) { printf("create socket failed ! error message :%s\n", strerror(errno)); return -1; } //UDP广播必须设置socket属性 /* int on = 1; if (setsockopt(st, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)) == -1) { printf("setsockopt failed ! error message :%s\n", strerror(errno)); return -1; } */ struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); //设置结构sockaddr_in类型是TCP/IP addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = inet_addr(args[1]); char buf[1024] = { 0 }; while (1) { //read read(STDIN_FILENO, buf, sizeof(buf)); if (sendto(st, buf, strlen(buf), 0, (struct sockaddr *) &addr, sizeof(addr)) == -1) { printf("sendto failed ! error message :%s\n", strerror(errno)); break; } memset(buf,0,sizeof(buf)); } close(st); return 0; }
//udp接收消息 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int arg, char * args[]) { if(arg<2) { printf("please print one param !\n"); return -1; } int st=socket(AF_INET,SOCK_DGRAM,0); if(st==-1) { printf("open socket failed ! error message : %s\n",strerror(errno)); return -1; } int port=atoi(args[1]); //defien ip address strcut struct sockaddr_in addr; //define addr type addr.sin_family=AF_INET; addr.sin_port=htons(port); addr.sin_addr.s_addr=htonl(INADDR_ANY); //bind port if(bind(st,(struct sockaddr *)&addr,sizeof(addr))==-1) { printf("bind IP failed ! error message : %s\n",strerror(errno)); goto END; } char buf[1024]={0}; struct sockaddr_in client_addr; socklen_t addrlen=sizeof(client_addr); while(1) { memset(&client_addr,0,sizeof(client_addr)); if(recvfrom(st,buf,sizeof(buf),0,(struct sockaddr *)&client_addr,&addrlen)==-1) { printf("recvfrom failed ! error message : %s\n",strerror(errno)); goto END; }else { printf("from %s:%s",inet_ntoa(client_addr.sin_addr),buf); } memset(buf,0,sizeof(buf)); } END:close(st); return 0; }
.SUFFIXES:.c .o CC=gcc SRCS1=udpsend.c SRCS2=udprecv.c OBJS1=$(SRCS1:.c=.o) OBJS2=$(SRCS2:.c=.o) EXEC1=msend EXEC2=mrecv start:$(OBJS1) $(OBJS2) $(CC) -o $(EXEC1) $(OBJS1) $(CC) -o $(EXEC2) $(OBJS2) @echo "-------ok-----------" .c.o: $(CC) -Wall -g -o $@ -c $< clean: rm -f $(OBJS1) rm -f $(EXEC1) rm -f $(OBJS2) rm -f $(EXEC2)
相关文章推荐
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- 【原创】《Linux高级程序设计》杨宗德著 - Linux Socket网络编程基础 - 网络通信基础
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- [python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- 基于udp_socket通信的网络编程
- linux网络编程之socket(十四):基于UDP协议的网络程序
- 【原创】《Linux高级程序设计》杨宗德著 - Linux Socket网络编程基础 - BSD Socket网络通信编程 分类: Linux --- 应用程序设计 2014-12-05 16:53 63人阅读 评论(0) 收藏
- linux网络编程之socket(UDP)
- Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- Linux Socket 网络编程 基于GTK+ 的多线程实现的局域网通信软件
- Linux Socket 网络编程 基于GTK+ 的多线程实现的局域网通信软件
- Linux网络编程:UDP Socket编程范例
- LInux 下网络编程之一UDP通信实例详解
- linux 网络编程:客户端与服务器通过TCP协议相互通信 + UDP
- Linux网络通信(二)Socket编写TCP/UDP
- linux网络编程之socket(十四):基于UDP协议的网络程序
- linux网络编程--第一弹UDP基本通信
- socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)