博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UDP通讯程序设计---6
阅读量:4647 次
发布时间:2019-06-09

本文共 2899 字,大约阅读时间需要 9 分钟。

一、函数化

 

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

1 #include 
2 #include
3 #include
4 #include
5 6 7 #define portnum 8888 8 #define msg_size 128 9 int main() 10 { 11 int sockfd; 12 char buffer[msg_size]; 13 struct sockaddr_in server_addr; 14 struct sockaddr_in client_addr; 15 int addrlen; 16 int n; 17 //1.创建套接字 18 sockfd = socket(AF_INET,SOCK_DGRAM,0); 19 20 //2.绑定地址 21 bzero(&server_addr,sizeof(struct sockaddr_in)); 22 server_addr.sin_family = AF_INET; 23 server_addr.sin_port = htons(portnum); 24 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 25 bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); 26 27 //3.接受数据 28 while(1) 29 { 30 addrlen = sizeof(struct sockaddr); //获取数据长度地址 31 bzero(buffer,sizeof(buffer)); 32 n = recvfrom(sockfd,buffer,msg_size,0,(struct sockaddr *)(&client_addr),&addrlen); 33 buffer[n] = 0; 34 printf("server received :%s\n",buffer); 35 } 36 //4.结束连接 37 close(sockfd); 38 return 0; 39 }

编译运行:

四、编写客户机代码

  touch udp_client,c

  chmod 777 udp_client.c

#include 
#include
#include
#include
#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则可以看到服务器运行结果

转载于:https://www.cnblogs.com/zxouxuewei/p/5380632.html

你可能感兴趣的文章
Android类参考---Fragment(五)
查看>>
【Web动画】SVG 实现复杂线条动画
查看>>
修改mysql数据库默认存储引擎和默认编码
查看>>
[TJOI2009] 战争游戏
查看>>
eclipse error
查看>>
微信小程序运行机制
查看>>
安卓新发布机制----app bundle
查看>>
3. 设计模式之创建模式
查看>>
python学习笔记-day6-【python如何写excel表】
查看>>
Switch的簡化
查看>>
tensorflow学习笔记一:安装调试
查看>>
(转自ztp800201) Android - 自定义标题栏(在标题栏中增加按钮和文本居中)
查看>>
领扣简单版--两数之和(Two Sum)
查看>>
第10月第25天 java annotation
查看>>
Spark- SparkSQL中 Row.getLong 出现NullPointerException错误的处理方法
查看>>
9.28 作业 6
查看>>
23. Merge k Sorted Lists
查看>>
CentOS7配置JAVA环境变量
查看>>
mysql 批量删除之大坑
查看>>
【Packet Tracer 实验笔记5】
查看>>