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断点

    第一步: 用firefox运行程序,当点击保存,提示保存失败后,启动firebug 通过请求找到addNew.ezt出现错误,在eztnews.xml里通过ctrl+F查找找到请求执行的类和方法 找到 ...

  2. 转载 Deep learning:六(regularized logistic回归练习)

    前言: 在上一讲Deep learning:五(regularized线性回归练习)中已经介绍了regularization项在线性回归问题中的应用,这节主要是练习regularization项在lo ...

  3. java 对象的上转型对象(父类)

    Example5_10.java class 类人猿 { void crySpeak(String s) { System.out.println(s); } } class People exten ...

  4. HDU 5719 Arrange

    根据条件,某些位置的数字就可以确定了.确定过程中如果有冲突,则无解. 如果B中出现了递增,C中出现了递减,则无解. 对于每一个未确定的a[i],ans需要更新,ans=ans*((c[i]-b[i]+ ...

  5. 英文SEO外部链接资源收集之常用的footprints

      inurl:/privacy-policy "Using Article Directory plugin"inurl:/terms "Using Article D ...

  6. 将项目同时托管到Github和Git@OSC

    http://my.oschina.net/GIIoOS/blog/404555?fromerr=KHvn8UKH 摘要 Github是最大的git代码托管平台,​GIT@OSC是国内最大的git代码 ...

  7. Python 数据挖掘 工具包整理

    连接器与io 数据库 类别 Python R MySQL mysql-connector-python(官方) RMySQL Oracle cx_Oracle ROracle MongoDB pymo ...

  8. MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库【转载】

    转自 MYSQL启用日志,查看日志,利用mysqlbinlog工具恢复MySQL数据库 - _安静 - 博客园http://www.cnblogs.com/xionghui/archive/2012/ ...

  9. <a href="#" onclick="history.back();"></a>这样写为什么是对的? -(转)

    为什么不用这样写?<a href="#" onclick="javascript:history.back();"></a> 正解是: ...

  10. 关于UIView及其子类重绘drawRect

    转载自:https://nezha.gitbooks.io/ios-developmentarticles/content/UIView%E7%9A%84drawRect%E9%87%8D%E7%BB ...