使用tcp_connect和tcp_listen的时间获取函数
来源:互联网 发布:淘宝店铺装修素材 编辑:程序博客网 时间:2024/06/06 00:00
tcp_connect.c 函数源码:(lib/tcp_connect.c)
/* include tcp_connect */
#include "unp.h"
int tcp_connect(const char *host, const char *serv)
{
intsockfd, n;
struct addrinfohints, *res, *ressave;
bzero(&hints,sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ( (n = getaddrinfo(host, serv, &hints, &res)) !=0)
err_quit("tcp_connect error for %s, %s: %s",
host, serv, gai_strerror(n));
ressave = res;
do {
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sockfd <0)
continue;/* ignore this one */
if (connect(sockfd, res->ai_addr, res->ai_addrlen) ==0)
break;/* success */
Close(sockfd);/* ignore this one */
}while ( (res = res->ai_next) !=NULL);
if (res ==NULL)/* errno set from final connect() */
err_sys("tcp_connect error for %s, %s", host, serv);
freeaddrinfo(ressave);
return(sockfd);
}
/* end tcp_connect */
/*
* We place the wrapper function here, not in wraplib.c, because some
* XTI programs need to include wraplib.c, and it also defines
* a Tcp_connect() function.
*/
int Tcp_connect(const char *host, const char *serv)
{
return(tcp_connect(host, serv));
}
#include "unp.h"
int main(int argc, char **argv)
{
intsockfd, n;
charrecvline[MAXLINE +1];
socklen_tlen;
struct sockaddr_storagess;
if (argc !=3)
err_quit("usage: daytimetcpcli <hostname/IPaddress> <service/port#>");
sockfd = Tcp_connect(argv[1], argv[2]);
len =sizeof(ss);
Getpeername(sockfd, (SA *)&ss, &len);
printf("connected to %s\n", Sock_ntop_host((SA *)&ss, len));
while ( (n = Read(sockfd, recvline, MAXLINE)) >0) {
recvline[n] = 0;/* null terminate */
Fputs(recvline, stdout);
}
exit(0);
}
/* include tcp_listen */
#include "unp.h"
int tcp_listen(const char *host, const char *serv, socklen_t *addrlenp)
{
intlistenfd, n;
constinton = 1;
struct addrinfohints, *res, *ressave;
bzero(&hints,sizeof(struct addrinfo));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
if ( (n = getaddrinfo(host, serv, &hints, &res)) !=0)
err_quit("tcp_listen error for %s, %s: %s",
host, serv, gai_strerror(n));
ressave = res;
do {
listenfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (listenfd <0)
continue;/* error, try next one */
Setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on,sizeof(on));
if (bind(listenfd, res->ai_addr, res->ai_addrlen) ==0)
break;/* success */
Close(listenfd);/* bind error, close and try next one */
}while ( (res = res->ai_next) !=NULL);
if (res ==NULL)/* errno from final socket() or bind() */
err_sys("tcp_listen error for %s, %s", host, serv);
Listen(listenfd, LISTENQ);
if (addrlenp)
*addrlenp = res->ai_addrlen;/* return size of protocol address */
freeaddrinfo(ressave);
return(listenfd);
}
/* end tcp_listen */
/*
* We place the wrapper function here, not in wraplib.c, because some
* XTI programs need to include wraplib.c, and it also defines
* a Tcp_listen() function.
*/
int Tcp_listen(const char *host, const char *serv, socklen_t *addrlenp)
{
return(tcp_listen(host, serv, addrlenp));
}
#include "unp.h"
#include <time.h>
int main(int argc, char **argv)
{
intlistenfd, connfd;
socklen_tlen;
charbuff[MAXLINE];
time_tticks;
struct sockaddr_storagecliaddr;
if (argc !=2)
err_quit("usage: daytimetcpsrv1 <service or port#>");
listenfd = Tcp_listen(NULL, argv[1],NULL);
for ( ; ; ) {
len =sizeof(cliaddr);
connfd = Accept(listenfd, (SA *)&cliaddr, &len);
printf("connection from %s\n", Sock_ntop((SA *)&cliaddr, len));
ticks = time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n", ctime(&ticks));
Write(connfd, buff, strlen(buff));
Close(connfd);
}
}
➜ names ./daytimetcpsrv1 1399
connection from 127.0.0.1:64225
➜ names ./daytimetcpcli 127.0.0.1 1399
connected to 127.0.0.1
Tue May 5 09:43:43 2015
- 使用tcp_connect和tcp_listen的时间获取函数
- PHP 时间的获取和使用 date()和strtotime()函数
- 使用udp_client或者udp_connect和udp_server 的时间获取函数
- 网络编程学习笔记(tcp_connect函数)
- lwip TCP客户端 tcp_connect函数源码解析
- php获取当日的起止时间和时间相关函数
- 网络编程学习笔记(tcp_listen函数)
- 使用.NET的DateTime函数获取上个月的起始和截止时间
- C#获取时间戳的封装方法函数+使用获取当前时间时间戳
- Python 日期,时间和函数的使用
- Oracle 函数获取时间的年份和月份
- C语言当中几个获取时间和处理的函数
- 分组函数和获取时间函数
- Linux下的时间函数:获取和设置时间的函数
- 获取当前时间的函数
- js获取时间的函数
- 获取时间函数的统计
- 获取当前时间的MySql时间函数
- cas 配置与自定义开发
- OpenCV中用于摄像头视频读取的函数说明
- webP用法
- java集合类
- 为android开放类增加自定义成员方法
- 使用tcp_connect和tcp_listen的时间获取函数
- 本体存储mysql数据库 ERROR:Content is not 。。。prolog
- yate学习--yatengine.h--class YATE_API MessageReceiver : public GenObject
- c++输出char型变量与字符串的地址
- mexHttpBinding协议 【发布元数据终结点】
- ArcGIS API for Javascript离线部署 (最新版本jsapi3.9)
- 怎样能将PDF转换成PPT呢
- 9 Adding and Deleting Nodes and Instances
- Java 内部类