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网络编程(简单的时间获取服务器)的更多相关文章

  1. Linux网络编程服务器模型选择之并发服务器(上)

    与循环服务器的串行处理不同,并发服务器对服务请求并发处理.循环服务器只能够一个一个的处理客户端的请求,显然效率很低.并发服务器通过建立多个子进程来实现对请求的并发处理.并发服务器的一个难点是如何确定子 ...

  2. Linux网络编程简单示例

    linux 网络编程是通过socket(套接字)接口实现,Socket是一种文件描述符,socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭& ...

  3. UNIX网络编程卷1 时间获取程序server TCP 协议相关性

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码:  这是一个简单的时间获取server程序.它和时间获取程序client一道工作. ...

  4. Linux网络编程服务器模型选择之循环服务器

    在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式.本节开始介绍Linux下套接字编程的服务器模型选择,主要包括循环服务器模型.并发服务器模型. ...

  5. Linux网络编程服务器模型选择之并发服务器(下)

    前面两篇文章(参见)分别介绍了循环服务器和简单的并发服务器网络模型,我们已经知道循环服务器模型效率较低,同一时刻只能为一个客户端提供服务,而且对于TCP模型来说,还存在单客户端长久独占与服务器的连接, ...

  6. UNIX网络编程卷1 时间获取程序server UDP 协议无关

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ ...

  7. UNIX网络编程卷1 时间获取程序client TCP 使用非堵塞connect

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.当在一个非堵塞的 TCP 套接字(可使用 fcntl 把套接字变成非堵塞的)上调用 co ...

  8. UNIX网络编程卷1 时间获取程序client UDP 协议无关

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...

  9. Linux网络编程(二)

    Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...

随机推荐

  1. RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)

      RecyclerView 给我们的可以检测滑动事件的接口 只有 一个方法 recyclerview.setOnScrollListener()或者 recyclerview.addOnScroll ...

  2. 從 Internet 安裝 Cygwin

    從 Internet 安裝 Cygwin 如果您有高速的 Internet 連線, 可以考慮用這個方法, 否則不建議使用 執行 setup.exe Cygwin Setup 畫面, 按 Next. C ...

  3. kali更新源

    原文链接:http://www.cnblogs.com/dunitian/p/4712852.html kali2.0官方下载地址: https://www.kali.org/downloads/ 可 ...

  4. SCOI2005栅栏

    Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木 ...

  5. c3p0连接池获得的Connection执行close方法后是否真的销毁Connection对象?

    问题描述: jfinal做的api系统中,在正常调用接口一段时间后,突然再调用接口的时候,该请求无响应api系统后台也无错误信息 (就是刚开始接口调用是正常的,突然就无响应了) 于是啊,就开始找错误. ...

  6. vertical-align

    http://www.zhangxinxu.com/wordpress/2015/08/css-deep-understand-vertical-align-and-line-height/

  7. Mongodb 故障分享 初始化时"errmsg" : "exception: new file allocation failure" 并且长时间处于STARTUP2

    Hello,大家下午好. 近几天的项目有点赶,所以耽误了更新.现在给大家分享下,在安装mongodb的过程中,遇到的故障一则.其实很小白的问题,当时遇到这个问题的时候比较心慌,浪费了很多时间,跟大家分 ...

  8. 巩固基础知识,从C# in depth开始

    真是书到用时方恨少,平时都是完成任务,书都是看个前面几章就扔书柜了.... 今天看了博客园一篇文章<我们为什么应该坚持写博客>,很有感触,觉得人生不能得过且过,以前为了各种原因,家庭,孩子 ...

  9. shell脚本中的几个括号总结(小括号/大括号/花括号)--from:http://www.cnblogs.com/hanyan225/archive/2011/10/06/2199652.html

    在Shell中的小括号,大括号结构和有括号的变量,命令的用法如下: 1.${var}2.$(cmd)3.()和{}4.${var:-string},${var:+string},${var:=stri ...

  10. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(四)

    前言 这一篇,我们终于到了讲解Entity Framework CodeFirst 的时刻了,首先创建实体对象模型,然后会通过配置Fluent API的方式来对实体对象模型进行完整的数据库映射操作. ...