首页 > 其他分享 >udp协议的时间服务器

udp协议的时间服务器

时间:2023-04-06 22:57:10浏览次数:52  
标签:协议 udp sockaddr char portstr str 服务器 include sin

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <string.h>
#include <time.h>

const int maxline=4096;

char * sock_ntop(const struct sockaddr *sa, socklen_t salen) {
	char portstr[8];
	static char str[128];
	
	switch(sa->sa_family) {
	case AF_INET: {
		struct sockaddr_in * sin = (struct sockaddr_in *) sa;
		if(inet_ntop(AF_INET, &sin->sin_addr, str, sizeof(str)) == NULL) {
			return NULL;
		}
		if(ntohs(sin->sin_port) != 0) {
			snprintf(portstr, sizeof(portstr), ":%d", ntohs(sin->sin_port));
			strcat(str, portstr);
		}
		return str;
	}
	}
}

void dg_echo(int sockfd, struct sockaddr * pcliaddr, socklen_t clilen) {
	int n;
	socklen_t len;
	char mesg[maxline], errbuff[maxline];
	time_t ticks;

	for(;;) {
		memset(mesg, 0, sizeof(mesg));
		len=clilen;
		if((n=recvfrom(sockfd, mesg, maxline, 0, pcliaddr, &len))<0) {
			strerror_r(errno, errbuff, maxline);
			fprintf(stderr, "recvfrom error: %s\n", errbuff);
			exit(-1);
		}
		printf("recv mesg: %s\n", mesg);
		printf("request from %s\n", sock_ntop(pcliaddr, len));

		ticks = time(NULL);
		snprintf(mesg, sizeof(mesg), "%.24s\r\n", ctime(&ticks));

		if(sendto(sockfd, mesg, sizeof(mesg), 0, pcliaddr, len)<0) {
			strerror_r(errno, errbuff, maxline);
			fprintf(stderr, "sendto error: %s\n", errbuff);
			exit(-1);
		}
	}
}

int main(int argc, char **argv) {
	int sockfd;
	struct sockaddr_in servaddr, cliaddr;
	char errbuff[maxline];

	if((sockfd=socket(AF_INET, SOCK_DGRAM, 0))<0) {
		strerror_r(errno, errbuff, maxline);
		fprintf(stderr, "socket error: %s\n", errbuff);
		exit(-1);
	}
	
	memset(&servaddr, 0, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(13);

	if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))<0) {
		strerror_r(errno, errbuff, maxline);
		fprintf(stderr, "bind error: %s\n", errbuff);
		exit(-1);
	}

	dg_echo(sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
	
	return 0;
}	

  

标签:协议,udp,sockaddr,char,portstr,str,服务器,include,sin
From: https://www.cnblogs.com/donggongdechen/p/17294526.html

相关文章

  • udp协议的获取时间的客户端
    #include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<errno.h>#include<string.h>constintmaxline=4096;voiddg_cli(FILE*fp,intsockfd,stru......
  • 47 openEuler搭建Nginx服务器-配置文件说明和管理模块
    47openEuler搭建Nginx服务器-配置文件说明和管理模块47.1Nginx配置文件说明当nginx服启动后,默认情况下它会读取如表2所示的配置文件。表2配置文件说明文件说明/etc/nginx/nginx.conf主要的配置文件/etc/nginx/conf.d配置文件的辅助目录,这些配置文件也被包含......
  • GPL 协议和 LGPL 协议的理解
    GPL协议的解释GPL(GNU通用公共许可证)是一种自由软件许可证,由自由软件基金会(FreeSoftwareFoundation,简称FSF)创建并维护。它是一种开源许可证,旨在保护软件用户的自由,并确保软件的自由传播和共享。GPL协议的主要原则如下:自由使用:用户有权以任何目的运行、研究、复制、修改和......
  • 管理WEB服务器文件的WebDAV协议&HTTP大跃进--QUIC与HTTP30&WEB安全攻击概述
    管理WEB服务器文件的WebDAV协议WebADV协议    WEBDAV追加方法  WeDAV请求示例  HTTP大跃进--QUIC与HTTP30 QUIC&HTTP3.0   HTTP2.0的问题队头阻塞建立连接的握手延迟大QUIC的特性0RTT   没有队头阻塞的多路复用 ......
  • RPC服务器不可用
    1、使用netshinterfaceipadd添加IP的时候出现下面的提示,RPC服务器不可用。2、打开运行框;输入services.msc命令。3、来到服务器管理器,确认一下RPC服务是否开启状态,remoteprocedurecall(rpc)。4、然后确认一下DCOM服务器是否开启状态,DCOMServerProcessLauncher。5、然后再......
  • 【日常】服务器入门补充
    文章目录服务器分类:1.塔式服务器2.机架式服务器3.刀片式服务器服务器电源服务器远程管理卡服务器CPU选型可以从以下网址了解服务器:DELL服务器地址:https://www.dell.com/zh-cn/work/shop/cty/sc/servers?ref=hpg_cat_item5_cta服务器分类:根据外观分类:1.塔式服务器和台式机一样,......
  • lightdb搭建单服务器高可用环境
    1、安装lightdb单机版,具体步骤可参考http://www.light-pg.com/docs/LightDB_Install_Manual/current/index.html此文示例所安装的单机版部分参数port:60001$LTHOME:/home/lightdb/test/monitored/ha/lightdb-x/13.8-23.1$LTDATA:/home/lightdb/test/monitored/ha/light......
  • 恒创科技:如何正确配置美国网络服务器?
    在使用美国网络服务器时,充分注意其配置对于确保服务器和网络的性能、稳定性和安全性至关重要。网络服务器配置是指设置和配置网络服务器的硬件和软件以使其启动和运行的过程。它涉及多个步骤,包括配置操作系统、网络协议、安全设置、用户访问、共享资源和网络服务。配置美......
  • npm老不行?用淘宝的服务器的源吧
    最近使用npm老不行,换成用cnpm但里面又不全,还好找到了办法我是在ECS服务器上使用淘宝的源,阿里云默认已设置了源如果想设置就如下方法:首先当然是安装npmsudoapt-getinstallnpm 设置npm的源安装依赖npminstall当然也可以直接不设置源,如下:npminstall--registry=https://registr......
  • HTTP协议的瓶颈&双工通信的WebScocket与HTTP
    HTTP协议的瓶颈影响HTTP网络请求的因素1.带宽2.延迟 HTTP协议的瓶颈1.一条连接只可发送一个请求2.请求只能从客户端开始,客户端不可以接受除响应以外的指令3.请求/响应头部不经压缩就发送4.每次互相发送相同的头部造成的浪费较多5.非强制压缩发送 双工通信的WebScock......