UDP网络程序设计

1. 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 #include <stdio.h>
2 #include <string.h>
3 #include <sys/socket.h>
4 #include <netinet/in.h>
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 <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则可以看到服务器运行结果

UDP网络程序模型设计的更多相关文章

  1. udp网络程序-发送、接收数据

    1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 代码如下: #coding=utf-8from socket im ...

  2. UDP网络程序,客户端和服务端交互原理

    创建一个udp客户端程序的流程是简单,具体步骤如下: 创建客户端套接字 发送/接收数据 关闭套接字 UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实 ...

  3. UDP网络程序实例

    根据前面所讲的网络编程的基础知识,以及UDP网络编程的特点,下面创建一个广播数据报程序.广播数据报是一种较新的技术,类似于电台广播,广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定 ...

  4. 使用 acl 编写 UDP 网络程序(UDP 重传及可靠性机制)

    在当今网络世界,虽然大部分网络应用都是基于 TCP 的,但有时 UDP 的网络通信也有用武之处.acl 的网络库中不仅提供了基于 TCP 的网络套接字流,同时也提供了 UDP 的网络库(目前 acl ...

  5. UDP 网络程序-发送_接收数据

    """ 创建udp连接 发送数据给 """ from socket import * # 创建udp套接字,使用SOCK_DGRAM udp ...

  6. VC++ UDP网络控制台程序

     采用的是VC2008,控制台应用程序,使用UDP编写. 1.服务端代码 //UDPServer.cpp #include <WinSock2.h> #include <stdio. ...

  7. TCP、UDP服务器模型 在网络程序里面,通常都是一

    TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...

  8. [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现

    转自:http://www.cnblogs.com/zhili/archive/2012/09/03/2666974.html 上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享 ...

  9. Linux网络编程:基于UDP的程序开发回顾篇

    基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下:   对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了 ...

随机推荐

  1. Java成员变量默认值

    Java中明确规定:1.如果是引用型的,比如:String,还有类对象,他们的默认值都是:null:2.而如果是值类型:double,int,long,float,char等等,他们都是:0:还有一个 ...

  2. tomcat内存优化问题

    Java内存组成 1) 堆 运行时数据区域,所有类实例和数组的内存均从此处分配.Java 虚拟机启动时创建.对象的堆内存由称为垃圾回收器 的自动内存管理系统回收. 堆由两部分组成: 其中eden+fr ...

  3. HDU-1232--畅通工程(最小生成树)

    Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...

  4. Java学习之位运算符

    位运算符:&,|,^,~,<<,>> & (按位与):只有对应的两个二进制位均为1时,结果才为1.例如,9&5,即00001001&000001 ...

  5. jQuery两种扩展插件的方式

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. Android系统权限及签名

    Android系统权限及签名   2015-03-23 19:13:33CSDN-chen52671-点击数:50     Android权限及签名 引子 现象:系统中的一个定制Service,服务是 ...

  7. leveldb性能分析

    Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了. 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计.特别是LSM算法. 那 ...

  8. HDU 5487 Difference of Languages(BFS)

    HDU 5487 Difference of Languages 这题从昨天下午2点开始做,到现在才AC了.感觉就是好多题都能想出来,就是写完后debug很长时间,才能AC,是不熟练的原因吗?但愿孰能 ...

  9. 皓轩的jquery mobile之路(二)

    jQuery Mobile 使用 HTML5 & CSS3 最小的脚本来布局网页. 编写代码要注意最外层div需要添加data-role="page" ,标题需要添加dat ...

  10. ecos的model

    表->dbschema->model 虚拟化model机制 在dbschema存在model不存在的情况下 很多mvc结构都这么来 model命名规则 {$app_name}_mdl_{$ ...