linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家
Linux UDP socket编程(UDP通讯模型):
UDPClient + UDPService。
Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用!
udpService:
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 2222
#define MAX_SIZE 1024
void UDP_answer(int sockfd)
{
struct sockaddr_in addr;
int i,n;
unsigned int addrlen;
char msg[MAX_SIZE];
while(1)
{
n=recvfrom(sockfd,msg,MAX_SIZE,0,(struct sockaddr *)&addr,&addrlen);
msg[n]=0;
fprintf(stdout,"i have received %s",msg);
n=strlen(msg);
for(i=0;i
msg[i]=toupper(msg[i]);
sendto(sockfd,msg,n,0,(struct sockaddr *)&addr,addrlen);
}
}
int main(void)
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=htonl(INADDR_ANY);
addr.sin_port=htons(SERVER_PORT);
if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)
{
perror("bind");
exit(1);
}
UDP_answer(sockfd);
close(sockfd);
return 0;
}
[/cpp]
udpClient:
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_SIZE 1024
void UDP_ask(int sockfd,const struct sockaddr_in *addr,int len)
{
char buf[MAX_SIZE];
int n;
while(1)
{
fgets(buf,MAX_SIZE,stdin);//input from keyboard to service
sendto(sockfd,buf,strlen(buf),0,(struct sockaddr *)addr,len);
printf("i have sent to server %s",buf);
printf("Waiting answer from server\n");
bzero(buf,MAX_SIZE);
n=recvfrom(sockfd,buf,MAX_SIZE,0,NULL,NULL);
buf[n]=0;
printf("i have received from server");
fputs(buf,stdout);
printf("\n");
}
}
int main(int argc,char **argv)
{
int sockfd,port;
struct sockaddr_in addr;
if(argc!=3){
fprintf(stderr,"Usage:%s sercer_ip server_port\n",argv[0]);
exit(1);
}
if((port=atoi(argv[2]))<0){
fprintf(stderr,"Usage:%s server_ip server_port\n",argv[0]);
exit(1);
}
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
if(inet_aton(argv[1],&addr.sin_addr)<0){
fprintf(stderr,"Ip error:%s\n",strerror(errno));
exit(1);
}
UDP_ask(sockfd,&addr,sizeof(struct sockaddr_in));
close(sockfd);
return 0;
}
[/cpp]
运行结果如下:
服务器在后台运行:./udpservice &
回显来自客服端的消息:略(ps可以查看后台进程PID)
客服端:
[cpp]
[root@localhost lab]# ./udpclient 127.0.0.1 2222
cplusplus
i have sent to server cplusplus
Waiting answer from server
i have received from serverCPLUSPLUS
hellowolrld
i have sent to server hellowolrld
Waiting answer from server
i have received from serverHELLOWOLRLD
[/cpp]
linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家相关推荐
- Linux系统下一切皆文件,socket编程浅析
"一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...
- c语言广播程序,C语言socket编程---udp通信及广播
上篇实现了TCP通信的例子.由于项目中需要一个服务器向多台客户端发送消息. 通过udp这种无连接的通信,将client.c增加一句 /* 设置通讯方式对广播,即本程序发送的一个消息,网络上所有主机均可 ...
- Linux系统下基于IO多路复用的大规模可靠UDP服务器的实现(三)
七.可靠性UDP的优化细节 4.5章节中,我们提到了KCP本身的优化提高,由于可靠性UDP是这个方案是否优秀的关键,而各种可靠UDP协议中都有TCP算法的影子,所以下面我们再仔细的谈一下这个部分.按照 ...
- linux系统charp命令,操作系统 Linux系统
Linux操作系统 预备知识(Operating System): 1.GNU项目,GNU项目是一个自由软件项目,旨在建立一个完全自由开放通用的UNIX软件平台. 2.操作系统:管理计算机硬件和软件资 ...
- TCP/IP网络编程---Linux系统下的TCP套接字编程
目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据 ...
- UDP通信——使用python实现简单的UDP通信
UDP通信--使用python实现简单的UDP通信 UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一 ...
- php 登录 linux服务器,如何实现linux系统远程登录到linux服务器
linux系统登录到远程linux服务器: 有多种不同的协议可供选择,也许SSH是"最好"的.SSH是secure shell的简写,意为"安全的shell". ...
- Linux系统磁状态检测,检测Linux硬件状态
计算机系统是由软件系统和硬件系统共同组成的.检测硬件状态对于保障整个系统的稳定是非常重要的.不论操作系统是使用Linux.还是Windows,一旦硬件出现故障,那么整个系统的安全就严重了.这里我们主要 ...
- Linux系统-小倒腾之Linux DIY定制裁剪(New kernel+Busybox)o_o(二)
在前面的<Linux系统-小倒腾之Linux DIY定制裁剪(附带简单网络功能)o_o(一)>博文中,我通过对一个Linux系统的裁剪,最终制作出来了一个带有网络功能的微型Linux系统; ...
最新文章
- python中文件读写位置的作用-Python中文件的读写
- APP技巧:微信中这6个设置建议关闭,可以防止个人信息或将全暴露,赶快看一看吧!...
- java读取src xml文件路径_Java获取路径方法相对路径读取xml文件方法
- PHP stomp 连接判断,php实现通过stomp协议连接ActiveMQ操作示例
- 黑客必须掌握的基本技能
- hive 的 left semi join 讲解与left jion的区别
- Python入门--列表,字典,元组,集合总结
- apktook 反编译错误
- python创建员工_Python综合练习之创建员工信息表
- Java中的Filter过滤器
- DS18B20引脚 实物引脚 (千万不要接反啊)
- arduino as5048工作原理_普通精度应用的另一种选择——磁性旋转编码器
- 【软件定义汽车】【场景篇】智能座舱
- MySQL中的“DATE_SUB()” 函数从日期减去指定的时间间隔
- 这款文件传输软件每隔10秒就会发起文件同步——镭速传输
- seata(二) 分布式事务框架seata1.3 AT及XA模式实例演示
- 青藤 #10115 栈练习1
- 关于谷歌中国的最新声明
- linux下的elf结构,ELF结构详细分析(1)---elf32_hdr
- 手机音视频应用开发前景