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. javascript语句语义大全(3)

    1. for(var i=0;i<10;i++){ } for循环,括号里面是循环条件,翻译过来是,初始设定1=0:没循环一次i会+1,直到i<10 2. var i=0: while(i ...

  2. Lucene入门教程

    Lucene教程 1 lucene简介 1.1 什么是lucene     Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么 ...

  3. ios 概况了解

    iOS的系统架构分为四个层次:( iOS是基于UNIX内核,android是基于Linux内核) 核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒 ...

  4. Struts2, jquery, select二级联动

    1. 下载jquery.js文件放在webroot下js文件夹里 2. 配置struts.xml: <package name="default" namespace=&qu ...

  5. DNS开源服务器BIND最小配置详解<转>

    一,简介 相对于存储和大数据领域,CDN是一个相对小的领域,但行行出状元,BIND就是CDN领域的蝉联N届的状元郎.BIND是一款非常常用的DNS开源服务器,全球有90%的DNS用BIND实现.值得一 ...

  6. 休眠唤醒不断开wifi.

    文件: /home/mxy/code/v1/frameworks/base/services/java/com/auto/opandora/Opandora.java 屏蔽掉: 957 SetWifi ...

  7. android点滴之HandlerThread的用法

    转载请注明出处:http://blog.csdn.net/lskshz/article/details/25364909 一.介绍 HandlerThread继承自Thread,当线程开启时,也就是它 ...

  8. Textbox服务器控件

    <body> <form id="form1" runat="server"> <div> 姓名:<asp:TextB ...

  9. 理解用requireJs 来实现javascript的模块化加载

    这是我看到的一片关于requirejs的初学者的文章,写的不错,下面结合自己的理解记录一下: 原文:http://www.sitepoint.com/understanding-requirejs-f ...

  10. 2016大连网络赛 Function

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Probl ...