时间获取程序客户端 UDP 协议无关

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie

/**

* UDP,协议无关,调用 getaddrinfo 和 udp_client

**/

#include "unp.h"

int

udp_client(const char *host, const char *serv, SA **saptr, socklen_t *lenp)

{

int sockfd, n;

struct addrinfo
hints, *res, *ressave;

//1.调用 getaddrinfo

//协议地址族为 AF_UNSPEC ,套接字类型为 SOCK_DGRAM

bzero(&hints, sizeof(struct addrinfo));

hints.ai_family = AF_UNSPEC;

hints.ai_socktype = SOCK_DGRAM;

if ( (n = getaddrinfo(host, serv, &hints, &res)) != 0)

err_quit("udp_client error for %s, %s: %s",

host, serv, gai_strerror(n));

ressave = res;

//2.尝试每个 addrinfo 结构直到成功或到达链表尾

do {

// 创建套接字

sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);

if (sockfd >= 0)

break;
/* success */

} while ( (res = res->ai_next) != NULL);

//3.如果 getaddrinfo 失败或创建套接字不成功,本函数将终止

if (res == NULL)
/* errno set from final socket() */

err_sys("udp_client error for %s, %s", host, serv);

//4.保存服务器套接字地址结构

*saptr = Malloc(res->ai_addrlen);

memcpy(*saptr, res->ai_addr, res->ai_addrlen);

*lenp = res->ai_addrlen;

//5.调用 freeaddrinfo 清理由 getaddrinfo 返回的动态存储空间

freeaddrinfo(ressave);

//6.返回套接字

return(sockfd);

}

/* end udp_client */

int

Udp_client(const char *host, const char *serv, SA **saptr, socklen_t *lenptr)

{

return(udp_client(host, serv, saptr, lenptr));

}

/**

* UDP,协议无关,调用 getaddrinfo 和 udp_client

**/

#include "unp.h"

int

main(int argc, char **argv)

{

int sockfd, n;

char recvline[MAXLINE + 1];

socklen_t
salen;

struct sockaddr
*sa;

if (argc != 3)

err_quit("usage: daytimeudpcli1 <hostname/IPaddress> <service/port#>");

//1.利用 Udp_client 获得 UDP 套接字和服务器套接字地址结构

sockfd = Udp_client(argv[1], argv[2], (void **) &sa, &salen);

//2.显示服务器地址

printf("sending to %s\n", Sock_ntop_host(sa, salen));

//3.发送1字节的数据报

Sendto(sockfd, "", 1, 0, sa, salen);
/* send 1-byte datagram */

//4.读取并显示应答数据报

n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);

recvline[n] = ‘\0‘;
/* null terminate */

Fputs(recvline, stdout);

exit(0);

}

时间: 2024-10-26 19:21:47

时间获取程序客户端 UDP 协议无关的相关文章

时间获取程序服务器 UDP 协议无关

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP 协议无关 调用 getaddrinfo 和 udp_server **/ #include "unp.h" #include <time.h> int main(int argc, char **argv) { int sockfd; ssize_t n; char buff[MAXLINE]; time_t ticks; socklen_t le

时间获取程序客户端 TCP 协议相关性

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取客户程序.客户与服务器建立一个TCP连接后,服务器以直观 可读格式简单地送回当前时间和日期 这个例子是协议相关,使用 inet_pton TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET -->

时间获取程序服务器 TCP 协议相关性

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取服务器程序.它和时间获取程序客户端一道工作. TCP/IPv4, IPv6 协议相关 IPv4 --> IPv6 (把代码中出现的左边的字符串换为右边的,就变成了IPv6版本的) sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_p

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

本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 最初代码: 这是一个简单的时间获取server程序.它和时间获取程序client一道工作. 它是 协议相关,把代码中出现的左边的字符串换为右边的,就变成了IPv6版本号的 IPv4 --> IPv6 sockaddr_in --> sockaddr_in6 AF_INET --> AF_INET6 sin_family --> sin6_family sin_port --&

时间获取程序客户端 TCP 使用非阻塞connect

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * TCP,使用非阻塞 connect **/ #include "unp.h" int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) { int flags, n, error; socklen_t len; fd_set rset, wset; struct timeval t

获取系统时间&amp;&amp;获取程序某一段执行时间

获取系统时间: CTime  _time; CString m_SystemTime("");  _time=CTime::GetCurrentTime();  m_SystemTime=_time.Format("%Y-%m-%d  %H:%M:%S"); 获取程序某一段执行时间: DWORD  betime(0),endtime(0),sumtime(0); int i=0; betime=GetTickCount(); while(i<10) {  Sl

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

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.当在一个非堵塞的 TCP 套接字(可使用 fcntl 把套接字变成非堵塞的)上调用 connect时. connect 将马上返回一个 EINPROGRESS 错误,只是已经发起的 TCP 三路握手继续进行. 接着使用 select 检測 这个连接是否建立成功 2.用途: 1)在TCP三路握手的时候进行其它处理 2)同一时候建立多个连接 3)使用 select 设置超时 /** * T

微信小程序 客户端时间 与 服务端时间

服务端时间 db.serverDate(); 在操作数据库,上传数据的时候可以使用服务端时间 wx.cloud.init();//初始化云 const db = wx.cloud.database(); db.collection('todos').add({ // data 字段表示需新增的 JSON 数据 data: { // _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了 date: db.server

Linux网络编程(简单的时间获取服务器)

1.一个简单的服务器时间获取程序 服务器和客户端采用UDP通信的方式,来编写一个简单的时间获取应用. 把过程大致理顺一下,首先是服务器端的编写,使用的是迭代的方式,没有并发 先创建一个socket而后bind服务器,绑定之后就可以创建一个循环来接收和发送 信息了,以达到和客户端之间的通信. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include