网络编程--UDP通信
2013-12-03 17:21
363 查看
UDP是面向无连接类型的传输服务,允许不建立好对话关系可进行数据发送。
UDP_SERVER:
1. 创建一个socket套接字,用socket()函数
2. 绑定ip和端口号到socket,用bind
3. 循环接收数据recvfrom(),用词函数可以进入阻塞状态
4. 关闭网络连接
注:intrecvfrom(socket s, void *buf, int len, unsigned int flags, struct sockaddr*from, int *fromlen)
成功:接收字符数 失败: -1
功能:用来接收远程主机指定的socket传来的数据,来源的网络地址from接收数据,存放到缓冲区buf里面去,len为buf所能接受的最大字节数,flags为0,fromlen网络地址大小
UDP_client:
1. 创建一个socket套接字,用socket()函数
2. 绑定ip和端口号到socket,用bind()可选
3. 设置对方ip和端口熟悉
4. 发送数据,用sendto
5. 关闭连接
注意:intsendto(socket s, const void *msg, int len, unsigned int flags, const structsockaddr *to, int tolen);
sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,发给网络地址to
以下代码:
UDP_server端:
UDP_client端:
UDP_SERVER:
1. 创建一个socket套接字,用socket()函数
2. 绑定ip和端口号到socket,用bind
3. 循环接收数据recvfrom(),用词函数可以进入阻塞状态
4. 关闭网络连接
注:intrecvfrom(socket s, void *buf, int len, unsigned int flags, struct sockaddr*from, int *fromlen)
成功:接收字符数 失败: -1
功能:用来接收远程主机指定的socket传来的数据,来源的网络地址from接收数据,存放到缓冲区buf里面去,len为buf所能接受的最大字节数,flags为0,fromlen网络地址大小
UDP_client:
1. 创建一个socket套接字,用socket()函数
2. 绑定ip和端口号到socket,用bind()可选
3. 设置对方ip和端口熟悉
4. 发送数据,用sendto
5. 关闭连接
注意:intsendto(socket s, const void *msg, int len, unsigned int flags, const structsockaddr *to, int tolen);
sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket,如果利用UDP协议则不需经过连线操作。参数msg指向欲连线的数据内容,参数flags 一般设0,发给网络地址to
以下代码:
UDP_server端:
// UDP program text,this is a UDP server #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <sys/socket.h> #include <sys/types.h> #include <string.h> #include <netdb.h> #include <netinet/in.h> #define portnumber 4321 int main() { int sockfd,nbyte; struct sockaddr_in UDP_server; char buf[1024]; sockfd = socket(AF_INET,SOCK_DGRAM,0); //create socket if(-1 == sockfd) { perror("create socket error: "); exit(1); } /*fill in IP and port number message*/ bzero(&UDP_server,sizeof(struct sockaddr_in)); //clear UDP_server.sin_family = AF_INET; UDP_server.sin_port = htons(portnumber); UDP_server.sin_addr.s_addr = htonl(INADDR_ANY); if(-1 == bind(sockfd,(struct sockaddr *)(&UDP_server),sizeof(struct sockaddr))) { perror("bind ip to socket error:"); exit(1); } while(1) { nbyte = sizeof(struct sockaddr_in); nbyte = recvfrom(sockfd,buf,1024,0,(struct sockaddr *)(&UDP_server),&nbyte); if(-1 == nbyte) { perror("recvfrom data error!:"); exit(1); } buf[nbyte] = '\0'; printf("Get message succed!\n %s \n",buf); bzero(buf,1024); } close(sockfd); return 0; }
UDP_client端:
// UDP text, this is a UDP client #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <netinet/in.h> #define portnumber 4321 int main(int argc,char *argv[]) { int sockfd,nbyte; struct sockaddr_in UDP_client; char buf[1024]; if(argc != 2) { printf("input error!\n"); exit(1); } sockfd = socket(AF_INET,SOCK_DGRAM,0); if(sockfd == -1) { perror("create client ocket error:\n"); exit(1); } bzero(&UDP_client,sizeof(struct sockaddr_in)); UDP_client.sin_family = AF_INET; UDP_client.sin_port = htons(portnumber); if(inet_aton(argv[1],&(UDP_client.sin_addr)) < 0) { perror("aton error: \n"); exit(1); } while(1) { printf("Please input:\n"); fgets(buf,1024,stdin); nbyte = sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)(&UDP_client),sizeof(struct sockaddr)); if(nbyte < 0) { perror("send error:\n"); exit(1); } printf("send succed: %s\n",buf); bzero(buf,nbyte); } close(sockfd); return 0; }执行效果:
相关文章推荐
- socket 网络编程高速入门(一)教你编写基于UDP/TCP的服务(client)通信
- Java网络编程:UDP通信
- C编程之基于UDP的网络通信
- 网络编程 UDP通信的过程 TCP通信过程 多线程文件上传
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- Java中的TCP/UDP网络通信编程
- socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信
- Java网络编程:UDP通信
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 简单UDP Socket 通信
- [Linux网络编程]UDP编程--UDP通信程序服务器端
- Java网络编程中的TCP,UDP通信方式详解
- LInux 下网络编程之一UDP通信实例详解
- java网络编程基础——UDP通信之DatagramSocket
- Linux 网络编程六(socket通信UDP版)
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
- [javaSE] 网络编程(UDP通信)
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
- 基于udp_socket通信的网络编程