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. linux系统tomcat项目部署和tomcat访问日志

    一.只用ip地址访问 先把端口号改成80,然后用 <Host name="localhost"  appBase="webapps"    137     ...

  2. 初探JavaScript魅力(五)

    JS简易日历    innerHTML <title>无标题文档</title> <script> var neirong=['一','二','三','四','五' ...

  3. PL/SQL Developer StringBuffer 专用复制

    ;PL/SQL Developer SpecialCopy definition;<LINE_1> for first line;<LINE_*> for all other ...

  4. [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目

    (1)项目导入JAR包:1.在项目目录里建立一个libs目录,将外部jar包拷贝在里面.2.右键点击项目,Bulid Path->Configure Build Path3.在设置Libraie ...

  5. C# 上传文件至远程服务器

    C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28|  分类: C#|举报|字号 订阅     最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传 ...

  6. 编写一条sql命令,sql删除没有中文的表

    删除包含中文的 和不饱和中文的字段 SHOW create table pages; drop table if exists `film`; CREATE TABLE `film` ( `id` i ...

  7. wireshark 使用技巧

      Wireshark使用技巧-GeoIP显示IP地理位置     在使用Wireshark时,有的时候需要知道抓取的报文中某个IP地址的具体地理位置,笨一点的方法是将IP地址复制,然后通过一些软件或 ...

  8. 利用hibernate实现oracle(每张表的ID)自动增长

    设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence 例如创建一个序列:CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVA ...

  9. POJ1611 The Suspects 并查集模板题

    题目大意:中文题不多说了 题目思路:将每一个可能患病的人纳入同一个集合,然后遍历查找每个点,如果改点点的根节点和0号学生的根节点相同,则该点可能是病人. 模板题并没有思路上的困难,只不过在遍历时需要额 ...

  10. UITabBar 蓝色

    效果图1: 第一种解决办法(有局限性): 但是,但是!!!!!虽然不用写代码看起来好方便,在iOS9和8上貌似都没问题.然后我默默地 拿出了自己的小4,发现还似蓝色... 第二种解决办法:(彻底): ...