Linux网络编程(简单的时间获取服务器)
1.一个简单的服务器时间获取程序
服务器和客户端采用UDP通信的方式,来编写一个简单的时间获取应用.
把过程大致理顺一下,首先是服务器端的编写,使用的是迭代的方式,没有并发
先创建一个socket而后bind服务器,绑定之后就可以创建一个循环来接收和发送
信息了,以达到和客户端之间的通信.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>
int main(int argc,char** argv)
{
printf("服务器开启中\n");
/*创建套接字*/
int fd = socket(AF_INET,SOCK_DGRAM,);
if(- == fd)
{
perror("socket");
exit(-);
}
/*准备通信地址*/
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons();
addr.sin_addr.s_addr = inet_addr("172.16.1.21");
/*防止端口被占用*/
int reuse = ;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
/*绑定网络端口和ip地址*/
if(bind(fd,(struct sockaddr*)&addr,sizeof(addr)) == -)
{
perror("bind");
exit(-);
}
while()
{
/*发送和接收消息*/
char buf[] = {};
struct sockaddr_in from;
/*创建一个当前的时间*/
time_t now = time();
struct tm* time = localtime(&now);
socklen_t f_size = sizeof(from);
recvfrom(fd,buf,sizeof(buf),,(struct sockaddr*)&from,&f_size);
printf("%s\n",buf);
memset(buf,,sizeof(buf));
char str[] = {};
sprintf(str,"%04d-%02d-%02d %02d:%02d:%02d",time->tm_year+,
time->tm_mon+,time->tm_mday,time->tm_hour,
time->tm_min,time->tm_sec);
strcpy(buf,str);
sendto(fd,buf,sizeof(buf),,(struct sockaddr*)&from,sizeof(from));
memset(buf,,strlen(buf));
memset(str,,strlen(str));
}
}
客户端的编写,因为是UDP通信,并没有用到connect连接.而sendto和recvfrom函数可以保存发送和接收的套接字地址
所以客户端只要创建一个迭代循环,每次输入一个就可以得到服务器的时间.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void)
{
/*准备套接字*/
int fd = socket(AF_INET,SOCK_DGRAM,);
if(- == fd)
{
perror("socket");
exit(-);
}
/*准备通信地址*/
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons();
addr.sin_addr.s_addr = inet_addr("172.16.1.21");
/*连接服务器的时候用sendto和UDP通信的时候可以不连接,直接发*/
while()
{
char buf[] = {};
struct sockaddr_in from;
socklen_t f_size = sizeof(from);
scanf("%s",buf);
if(- == sendto(fd,buf,strlen(buf),,(struct sockaddr*)&addr,f_size))
{
perror("sendto");
exit(-);
}
memset(buf,,strlen(buf));
if(- == recvfrom(fd,buf,sizeof(buf),,(struct sockaddr*)&from,&f_size))
{
perror("recvfrom");
exit(-);
}
printf("%s\n",buf);
memset(buf,,strlen(buf)); }
close(fd);
return ;
}
Linux网络编程(简单的时间获取服务器)的更多相关文章
- Linux网络编程服务器模型选择之并发服务器(上)
与循环服务器的串行处理不同,并发服务器对服务请求并发处理.循环服务器只能够一个一个的处理客户端的请求,显然效率很低.并发服务器通过建立多个子进程来实现对请求的并发处理.并发服务器的一个难点是如何确定子 ...
- Linux网络编程简单示例
linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭& ...
- UNIX网络编程卷1 时间获取程序server TCP 协议相关性
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取server程序.它和时间获取程序client一道工作. ...
- Linux网络编程服务器模型选择之循环服务器
在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式.本节开始介绍Linux下套接字编程的服务器模型选择,主要包括循环服务器模型.并发服务器模型. ...
- Linux网络编程服务器模型选择之并发服务器(下)
前面两篇文章(参见)分别介绍了循环服务器和简单的并发服务器网络模型,我们已经知道循环服务器模型效率较低,同一时刻只能为一个客户端提供服务,而且对于TCP模型来说,还存在单客户端长久独占与服务器的连接, ...
- UNIX网络编程卷1 时间获取程序server UDP 协议无关
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ ...
- UNIX网络编程卷1 时间获取程序client TCP 使用非堵塞connect
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.当在一个非堵塞的 TCP 套接字(可使用 fcntl 把套接字变成非堵塞的)上调用 co ...
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...
- Linux网络编程(二)
Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...
随机推荐
- 【积累】validate验证框架的使用
validate验证框架的使用:用验证框架可以很方便的验证前端页面输入的内容可以自定义验证方法 内容:0:环境搭建 1:基础用法 2:自定义用法 0:基本环境的搭建 0.1:下载js文件 0.2:引入 ...
- SQLserver2008数据库备份和还原问题(还原是必须有完整备份)
首先,我要说明的是你必须拥有完整的数据库备份,下面的还原教程,才算有用,如果其它问题,请搜索别的大牛的解决办法,本方法只适合菜鸟. 这个连接是站长大人的异常恢复方法,有问题可以自己学习http://w ...
- android Glide图片加载框架的初探
一.Glide图片加载框架的简介 谷歌2014年开发者论坛会上介绍的图片加载框架,它让我们在处理不管是网路下载的图片还是本地的图片,减轻了很多工作量, 二.开发步骤: 1.添加链接库 compile ...
- js函数前面写上分号的原因
说个之前先说,网站上传一些文件,考虑到性能问题,会用一些压缩软件来压缩代码(grunt,glup,webpack,etc..),这时候就可能出现一个问题.看下面代码 (function a(){... ...
- AR/VR技术交流
本人建了一个QQ群(群号:331922761),欢迎对AR,VR技术感兴趣的同学加入一起学习讨论.
- yii2-basic后台管理功能开发之三:自定义GridView列显示
在第二篇 yii2-basic后台管理功能开发之二:创建CRUD增删改查 中,我们利用gii工具生成的结果一般并不是我们想要的结果. 我们需要根据自己的需求自定义列显示.我遇到的主要是一下变更: 时间 ...
- 如何在VISIO 2010/2013 中关闭Shape protection(图形保护)
最近在画UML图,用到MS visio 2010, 在使用一些网络查找到的图形的时候发现无法编辑,在网上找了找,翻译了下. Visio 2013 的图形保护功能,可以锁定图形的某些特定属性,使其无法被 ...
- 在JSP中上传图片到数据库中
第一步:建立数据库 create table test_img(id number(4),name varchar(20),img long raw); 第二步:(NewImg.html) <h ...
- C#winform调整控件的位置
现在有三个控件并排放置 第二个控件有隐藏功能 隐藏后第一个控件和第三个控件的距离要缩小,于是就要改变第三个控件的位置 尝试用Location.X属性去设置,但是被告知此非变量 于是只能另外想办法 搜到 ...
- Amazon EC2免费VPS防止超额被扣钱三大方法:流量 硬盘读写 运行时长
Amazon EC2也就是亚马逊云服务免费VPS主机服务,内存是613MB,月流量是30GB,主机空间是30GB,可以免费使用一年,又加上Amazon服务器全球多个节点CDN和本身的名气,早在2010 ...