UDP编程之一

单播模型

echoserver.c

 

 1 #include <apue.h>
 2
 3 #define PORT 8080
 4 #define LEN_BUF 255
 5
 6 void do_business(int sockfd);
 7
 8 int main(void)
 9 {
10     //1.创建socket
11     int sockfd;
12     if((sockfd = socket(PF_INET,SOCK_DGRAM,0))<0)
13         ERR("socket failed");
14
15     //2.绑定地址
16     struct sockaddr_in ipv4;
17     CLEAR(ipv4);
18     ipv4.sin_family = AF_INET;
19     ipv4.sin_port = htons(PORT);                    //NBO
20     //inet_pton(AF_INET,IP,&ipv4.sin_addr);
21     ipv4.sin_addr.s_addr = htonl(INADDR_ANY);        //NBO
22
23     if(bind(sockfd,(struct sockaddr*)&ipv4,sizeof(ipv4))<0)
24         ERR("bind failed");
25
26     //3.交互
27     do_business(sockfd);
28
29     //4.关闭
30     close(sockfd);
31     return 0;
32 }
33
34 void do_business(int sockfd)
35 {
36     struct sockaddr_in peer;
37     char buf[LEN_BUF];
38     socklen_t len = sizeof(peer);
39     int n;
40     while(1)
41     {
42         if((n = recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&peer,&len))<0)
43             ERR("recv failed");
44         if(sendto(sockfd,buf,n,0,(struct sockaddr*)&peer,sizeof(peer))<0)
45             ERR("send failed");
46     }
47 }

echoclient.c

 1 #include <apue.h>
 2
 3 #define PORT 8080
 4 #define LEN_BUF 255
 5
 6 void do_business(const char *ipstr,unsigned short port,int sockfd);
 7
 8 int main(int argc,char **argv)
 9 {
10     //0.解析命令行参数
11     if(argc!=3)
12     {
13         printf("Usage: %s <ip> <port>\n",argv[0]);
14         exit(0);
15     }
16     unsigned short port = strtol(argv[2],NULL,10);
17
18     //1.创建socket
19     int sockfd;
20     if((sockfd = socket(PF_INET,SOCK_DGRAM,0))<0)
21         ERR("socket failed");
22
23     //3.交互
24     do_business(argv[1],port,sockfd);
25
26     //4.关闭
27     close(sockfd);
28     return 0;
29 }
30
31 void do_business(const char *ipstr,unsigned short port,int sockfd)
32 {
33     struct sockaddr_in peer;
34     CLEAR(peer);
35     peer.sin_family = AF_INET;
36     peer.sin_port = htons(port);
37     inet_pton(AF_INET,ipstr,&peer.sin_addr);
38
39     char buf[LEN_BUF],msg[LEN_BUF];
40     int n;
41     while(1)
42     {
43         printf("shell# ");
44         fflush(stdout);
45         scanf("%s",buf);
46         if(sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&peer,sizeof(peer))<0)
47             ERR("send failed");
48         if((n = recvfrom(sockfd,msg,LEN_BUF,0,NULL,NULL))<0)
49             ERR("recv failed");
50         msg[n] = 0;
51         printf("%s\n",msg);
52     }
53 }

UDP编程之一

时间: 2024-08-04 18:41:51

UDP编程之一的相关文章

udp编程的学习

最近在做一个网络应用小程序(虽然很烦应用层编程...),实现视频数据通过网络无限发送,不关有无网络,数据都发出,用于产品的老化测试. 起初代码是用TCP写的,TCP有连接,产品作为server,起一个监控connect线程,有client连接,监控线程告诉主线程,主线程就将数据发出,没有client连接,主线程则将数据抛空. 但是有这样一个需求,用户插入网线后,PC端的client接收数据,然后强制拔掉网线,这时server还要一直在发送数据(数据是发出还是抛空无所谓),这样实现产品的长时间运行

Socket编程实践(12) --UDP编程基础

UDP特点 无连接,面向数据报(基于消息,不会粘包)的数据传输服务; 不可靠(可能会丢包, 乱序, 重复), 但因此一般情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *a

Linux下的socket编程实践(十) 基本UDP编程细节

在我的这两篇博客中,简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. http://blog.csdn.net/nk_test/article/details/47733307 http://blog.csdn.net/nk_test/article/details/47756381 下图是一个简单的UDP客户/服务器模型: 我在这里也实现了一个简单的UDP回射服务器/客户端: /**实践: 实现一个基

嵌入式 Linux网络编程(三)——UDP编程模型

嵌入式 Linux网络编程(三)--UDP编程模型 UDP编程模型: UDP循环服务器模型为: socket(...); bind(...); while(1) {    recvfrom(...);    process(...);    sendto(...); } server.c代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #inc

Linux学习四:UDP编程(上)

关于UDP和TCP对比优缺,这里就不说了. 使用UDP代码所掉用的函数和用于TCP的函数非常类似,这主要因为套接口库在底层的TCP和UDP的函数上加了一层抽象,通过这层抽象使得编程更容易,但失去了一些控制. 二者函数调用唯一的实际区别是soceket函数调用的一个参数,TCP的是SOCK_STREAM,UDP的是SOCK_DGRAM,二者都可以使用recvfrom函数,而recv只用于TCP. 当然函数的变化不是这么简单,因为你要从一种有连接的协议转向到无连接的协议上去.这里写个很简单直接的UD

Linux 网络编程——UDP编程

概述 UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议.UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地.由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快. UDP 有如下的特点: 1)邮件系统服务模式的抽象(可通过邮件模型来进行对比) 2)每个分组都携带完整的目的

基于Linux下的UDP编程

一. Linux下UDP编程框架 使用UDP进行程序设计可以分为客户端和服务器端两部分. 1.服务器端程序包括: Ø  建立套接字 Ø  将套接字地址结构进行绑定 Ø  读写数据 Ø  关闭套接字 2.客户端程序包括: Ø  建立套接字 Ø  读写数据 Ø  关闭套接字 3.服务器端和客户端程序之间的差别 服务器端和客户端两个流程之间的主要差别在于对地址的绑定函数(bind()函数),而客户端可以不用进行地址和端口的绑定操作. 二.Linux中UDP套接字函数  从图可知,UDP协议的服务端程序

Node.js开发入门—UDP编程

Node.js也提供了UDP编程的能力,相关类库在"dgram"模块里. 与TCP不同,UDP是无连接的,不保障数据的可靠性,不过它的编程更为简单,有时候我们也需要它.比如做APP的统计或者日志或者流媒体,很多流媒体协议都会用到UDP,网上一搜一大堆. 使用UDP,如果你要发送数据,只需要知道对方的主机名(地址)和端口号,扔一消息过去即可.至于对方收不收得到,听天由命了.这就是数据报服务,类似快递或邮件. 我们这次来介绍一下Node.js里的UDP编程,我会提供一个UDP版本的echo

Java笔记二十三.网络编程基础与UDP编程

网络编程基础与UDP编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.网络编程基础 1.TCP/IP协议:TCP/IP协议是一个非常实用的网络应用程序通信协议,包括TCP(传输控制协议)和IP地址(计算机唯一标识号). 2.IP地址:IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证),通过这个标识号来指定接收数据的计算机和识别发送数据的计算机,该标识号即为IP地址. (1)Ipv4:指在计算机中IP地址用4个字节(

第14章 UDP编程(1)_UDP客户端服务器模型

1. UDP编程模型 (1)UDP客户端服务器模型 ①客户端可以不调用bind()而直接与服务器通讯. ②UDP是无连接的,因此服务端不需要调用accept和listen,客户端也无需调用connect函数. (2)数据传输 ①发送数据 头文件 #include <sys/socket.h> 函数 ssize_t send(int sockfd, const void* buf, size_t nbytes, int flag); ssize_t send(int sockfd, const