UDP通讯程序设计
2016-03-24 12:01
155 查看
UDP通讯程序设计
一、函数化
1.1服务器使用的函数
创建socket----->socket
绑定地址-------->bind
接受数据-------->recvfrom
发送数据-------->sendto
结束连接-------->close
1.2客户机使用函数
创建套接字------>socket
发送数据-------->sento
接受数据-------->recvfrom
结束连接-------->close
二、函数学习
2.1 发送数据sendto
2.1.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.1.2函数原型
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
2.1.3函数参数
sockfd:创建的套接字
*buf:要发送的数据地址
len:数据长度
flags:标识符
dest_addr:目的机地址
addrlen:地址长度
2.1.4返回值
实际发送的数据量
2.2接收数据recvfrom
2.2.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.2.2函数原型
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
2.2.3函数参数
sockfd:创建的套接字
*buf:数据存放的地址
len:数据长度
flags:标识符
dest_addr:数据来源方方的地址
addrlen:地址长度的指针
2.2.4返回值
以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,若出错则返回-1
三、编写服务器代码
touch udp_server.c
chmod 777 udp_server.c
编译运行:
四、编写客户机代码
touch udp_client,c
chmod 777 udp_client.c
编译运行:
4.1则可以看到服务器运行结果
一、函数化
1.1服务器使用的函数
创建socket----->socket
绑定地址-------->bind
接受数据-------->recvfrom
发送数据-------->sendto
结束连接-------->close
1.2客户机使用函数
创建套接字------>socket
发送数据-------->sento
接受数据-------->recvfrom
结束连接-------->close
二、函数学习
2.1 发送数据sendto
2.1.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.1.2函数原型
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
2.1.3函数参数
sockfd:创建的套接字
*buf:要发送的数据地址
len:数据长度
flags:标识符
dest_addr:目的机地址
addrlen:地址长度
2.1.4返回值
实际发送的数据量
2.2接收数据recvfrom
2.2.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.2.2函数原型
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
2.2.3函数参数
sockfd:创建的套接字
*buf:数据存放的地址
len:数据长度
flags:标识符
dest_addr:数据来源方方的地址
addrlen:地址长度的指针
2.2.4返回值
以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,若出错则返回-1
三、编写服务器代码
touch udp_server.c
chmod 777 udp_server.c
#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #define portnum 8888 #define msg_size 128 int main() { int sockfd; char buffer[msg_size]; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int addrlen; int n; //1.创建套接字 sockfd = socket(AF_INET,SOCK_DGRAM,0); //2.绑定地址 bzero(&server_addr,sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(portnum); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); //3.接受数据 while(1) { addrlen = sizeof(struct sockaddr); //获取数据长度地址 bzero(buffer,sizeof(buffer)); n = recvfrom(sockfd,buffer,msg_size,0,(struct sockaddr *)(&client_addr),&addrlen); buffer = 0; printf("server received :%s\n",buffer); } //4.结束连接 close(sockfd); return 0; }
编译运行:
四、编写客户机代码
touch udp_client,c
chmod 777 udp_client.c
#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #define buffer_size 128 #define portnum 8888 int main(int argc,char **argv[]) { int sockfd; char buffer[buffer_size]; struct sockaddr_in server_addr; if(argc != 2) { printf("usage: %s server_ip\n",argv[0]); exit(1); } //1.创建套接字 sockfd = socket(AF_INET,SOCK_DGRAM,0); //初始化服务器地址 bzero(&server_addr,sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(portnum); inet_aton(argv[1],&server_addr.sin_addr); //2.发送数据 while(1) { printf("please input char: \n"); fgets(buffer,buffer_size,stdin); sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); bzero(buffer,buffer_size); } //3.关闭连接 close(sockfd); return 0; }
编译运行:
4.1则可以看到服务器运行结果
相关文章推荐
- MySQL之binlog_row_image参数
- Caffe傻瓜系列(10):draw_net.py绘制caffe net结构
- mybatis如何防止sql注入
- Unity3D 一键更换场景物体
- mysql 整理
- Eclipse上GIT插件EGIT使用手册
- 关于I++和++i的补充和举例
- INFA Transformation组件
- unity5.2.3MonoDevelop编辑不了,报错xx is not under control
- Android Volley完全解析
- HashMap的工作原理
- Linux下查看文件内容的命令
- 深入理解SQL的四种连接
- 也谈BIO | NIO | AIO (Java版)
- hdu 2510 符号三角形【DFS+打表】
- 一分钟了解互联网数据挖掘流程
- 【追求进步】树的子结构
- MySQL 错误日志(Error Log)
- iOS开发之pickerView 制作省份选择器
- 第三周总结