UDP Socket编程
来源:互联网 发布:web项目程序员个人简历 编辑:程序博客网 时间:2024/04/28 07:17
UDP编程的服务器端一般步骤是:
1、创建一个socket,用函数socket();
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收发送数据,用函数recvfrom()、sendto();
5、关闭网络连接;
UDP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置对方的IP地址和端口等属性;
3、连接服务器,用函数connect();
若是只是一次发送、接收数据,此函数可不用;
若是循环发送接收,则此处要用connect函数;因为若不用,当sendto()后这时服务器器kill掉,则 client端阻塞在recvfrom处;
4、循环发送接收数据,用函数sendto()、recvfrom();
5、关闭网络连接;
使用C语言,实现过程如下:
UDPServer.c
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <string.h> #define BUFSIZE 1024#define ip_address "127.0.0.1"#define PORT 3000 int main(){ int sockfd; int port = PORT; struct sockaddr_in servaddr,clientaddr; struct hostent *hostp; char buf[BUFSIZE]; int res; //create socket sockfd =socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); //or sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0) printf("errorcreate socket!\n"); //set socket option int optval = 1; setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(constvoid*)&optval,sizeof(int)); //build the server's Internet address bzero((char *)&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); //bind if(bind(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr)) < 0) printf("error on binding!\n"); //recvfrom and sendto in circle int clientlen = sizeof(clientaddr); while(1) { bzero(buf,BUFSIZE); res = recvfrom(sockfd,buf,BUFSIZE,0,(structsockaddr*)&clientaddr,&clientlen); if(res < 0) { printf("error in recvfrom!\n"); break; } res = sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&clientaddr,clientlen); if(res < 0) { printf("error in sendto.\n"); break; } } close(sockfd);}
UDPClient.c
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <string.h>#define BUFSIZE 1024void error(char* msg){perror(msg);exit(0);}int main(){ int sockfd; int port = 3000; int res; struct sockaddr_in servaddr; char buf[BUFSIZE]; //create socket sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd < 0) error("error create socket"); //build the server's Internet address bzero((char *)&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; //servaddr.sin_addr = inet_addr("127.0.0.1"); //or inet_aton("127.0.0.1",servaddr.sin_addr.s_addr); servaddr.sin_port = htons(port); //get msg from user bzero(buf,BUFSIZE); printf("Please enter msg:"); fgets(buf,BUFSIZE,stdin); //send msg to server res = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)&servaddr,sizeof(servaddr)); if(res < 0) error("error in sendto"); //print the server's reply int servaddrlen = sizeof(servaddr); res = recvfrom(sockfd,buf,strlen(buf),0,(struct sockaddr *)&servaddr,&servaddrlen); if(res < 0) error("error in recvfrom"); printf("Echo from server: %s",buf);return 0; }
0 0
- socket udp编程理论
- socket的udp编程
- Socket UDP编程
- UDP socket编程
- TCP、UDP、SOCKET编程
- Linux socket编程:udp
- UDP Socket编程
- python socket编程 UDP
- Socket编程UDP/TCP
- Socket编程-UDP协议
- Socket编程--TCP/UDP
- UDP Socket编程
- Java UDP Socket编程
- Socket编程TCP/UDP
- C#-Socket编程-UDP
- UDP通信socket编程
- python-socket-udp编程
- socket网络编程udp
- 异常学习笔记
- 就是电工师傅看了你的房间看了你会看见的功能键凯立德
- hdu 1976 注意要仔细,别落下什么
- MySql体系结构
- 杭电 1106
- UDP Socket编程
- LeetCode第五题,Longest Palindromic Substring
- spring配置问题:org.xml.sax.SAXParseException: Open quote is expected for attribute "{1}" associated with
- 目前比较全面的浏览器CSS BUG兼容汇总
- wikioi线段覆盖
- 浮点异常值:NAN,QNAN,SNAN
- c++不同的命名空间访问的问题
- 每年的什么年前后剧情大范甘迪撒
- UVA - 10815 Andy's First Dictionary