使用udp_client或者udp_connect和udp_server 的时间获取函数
2015-05-05 09:59
411 查看
udp_client.c函数代码:
/* include 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;
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;
do {
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sockfd >=
0)
break;
/* success */
}
while ( (res = res->ai_next) !=
NULL);
if (res ==
NULL)
/* errno set from final socket() */
err_sys("udp_client error for %s, %s", host, serv);
*saptr = Malloc(res->ai_addrlen);
memcpy(*saptr, res->ai_addr, res->ai_addrlen);
*lenp = res->ai_addrlen;
freeaddrinfo(ressave);
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));
}
daytimeupdcli1.c客户端代码:(使用udp_client.c)
#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#>");
sockfd = Udp_client(argv[1], argv[2], (void
**) &sa, &salen);
printf("sending to %s\n", Sock_ntop_host(sa, salen));
Sendto(sockfd,
"", 1,
0, sa, salen); /* send 1-byte datagram */
n = Recvfrom(sockfd, recvline, MAXLINE,
0, NULL,
NULL);
recvline
=
'\0';
/* null terminate */
Fputs(recvline, stdout);
exit(0);
}
或者:
udp_connect.c代码:
/* include udp_connect */
#include "unp.h"
int udp_connect(const char *host, const char *serv)
{
int
sockfd, n;
struct addrinfo
hints, *res, *ressave;
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_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("udp_connect error for %s, %s", host, serv);
freeaddrinfo(ressave);
return(sockfd);
}
/* end udp_connect */
int Udp_connect(const char *host, const char *serv)
{
int
n;
if ( (n = udp_connect(host, serv)) <
0) {
err_quit("udp_connect error for %s, %s: %s",
host, serv, gai_strerror(-n));
}
return(n);
}
daytimeupdcli2.c(使用udp_connect.c):
#include "unp.h"
int main(int argc, char **argv)
{
int
sockfd, n;
char
recvline[MAXLINE + 1];
if (argc !=
3)
err_quit("usage: daytimeudpcli2 <hostname/IPaddress> <service/port#>");
sockfd = Udp_connect(argv[1], argv[2]);
Write(sockfd,
"", 1);
/* send 1-byte datagram */
n = Read(sockfd, recvline, MAXLINE);
recvline
=
'\0';
/* null terminate */
Fputs(recvline, stdout);
exit(0);
}
udp_server.c代码:
/* include udp_server */
#include "unp.h"
int udp_server(const char *host, const char *serv, socklen_t *addrlenp)
{
int
sockfd, n;
struct addrinfo
hints, *res, *ressave;
bzero(&hints,
sizeof(struct addrinfo));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
if ( (n = getaddrinfo(host, serv, &hints, &res)) !=
0)
err_quit("udp_server 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;
/* error - try next one */
if (bind(sockfd, res->ai_addr, res->ai_addrlen) ==
0)
break;
/* success */
Close(sockfd);
/* bind error - close and try next one */
}
while ( (res = res->ai_next) !=
NULL);
if (res ==
NULL)
/* errno from final socket() or bind() */
err_sys("udp_server error for %s, %s", host, serv);
if (addrlenp)
*addrlenp = res->ai_addrlen;
/* return size of protocol address */
freeaddrinfo(ressave);
return(sockfd);
}
/* end udp_server */
int Udp_server(const char *host, const char *serv, socklen_t *addrlenp)
{
return(udp_server(host, serv, addrlenp));
}
daitimeupdsrv2.c代码:
#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
len;
struct sockaddr_storage
cliaddr;
if (argc ==
2)
sockfd = Udp_server(NULL, argv[1],
NULL);
else
if (argc == 3)
sockfd = Udp_server(argv[1], argv[2],
NULL);
else
err_quit("usage: daytimeudpsrv [ <host> ] <service or port>");
for ( ; ; ) {
len =
sizeof(cliaddr);
n = Recvfrom(sockfd, buff, MAXLINE,
0, (SA *)&cliaddr, &len);
printf("datagram from %s\n", Sock_ntop((SA *)&cliaddr, len));
ticks = time(NULL);
snprintf(buff,
sizeof(buff), "%.24s\r\n", ctime(&ticks));
Sendto(sockfd, buff, strlen(buff),
0, (SA *)&cliaddr, len);
}
}
运行结果:
服务器:
➜ names ./daytimeudpsrv2 1399
datagram from 127.0.0.1:52995
datagram from 127.0.0.1:50425
客户端:
➜ names ./daytimeudpcli1 127.0.0.1 1399
sending to 127.0.0.1
Tue May 5 10:05:58 2015
➜ names ./daytimeudpcli2 127.0.0.1 1399
Tue May 5 10:06:04 2015
/* include 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;
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;
do {
sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (sockfd >=
0)
break;
/* success */
}
while ( (res = res->ai_next) !=
NULL);
if (res ==
NULL)
/* errno set from final socket() */
err_sys("udp_client error for %s, %s", host, serv);
*saptr = Malloc(res->ai_addrlen);
memcpy(*saptr, res->ai_addr, res->ai_addrlen);
*lenp = res->ai_addrlen;
freeaddrinfo(ressave);
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));
}
daytimeupdcli1.c客户端代码:(使用udp_client.c)
#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#>");
sockfd = Udp_client(argv[1], argv[2], (void
**) &sa, &salen);
printf("sending to %s\n", Sock_ntop_host(sa, salen));
Sendto(sockfd,
"", 1,
0, sa, salen); /* send 1-byte datagram */
n = Recvfrom(sockfd, recvline, MAXLINE,
0, NULL,
NULL);
recvline
=
'\0';
/* null terminate */
Fputs(recvline, stdout);
exit(0);
}
或者:
udp_connect.c代码:
/* include udp_connect */
#include "unp.h"
int udp_connect(const char *host, const char *serv)
{
int
sockfd, n;
struct addrinfo
hints, *res, *ressave;
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_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("udp_connect error for %s, %s", host, serv);
freeaddrinfo(ressave);
return(sockfd);
}
/* end udp_connect */
int Udp_connect(const char *host, const char *serv)
{
int
n;
if ( (n = udp_connect(host, serv)) <
0) {
err_quit("udp_connect error for %s, %s: %s",
host, serv, gai_strerror(-n));
}
return(n);
}
daytimeupdcli2.c(使用udp_connect.c):
#include "unp.h"
int main(int argc, char **argv)
{
int
sockfd, n;
char
recvline[MAXLINE + 1];
if (argc !=
3)
err_quit("usage: daytimeudpcli2 <hostname/IPaddress> <service/port#>");
sockfd = Udp_connect(argv[1], argv[2]);
Write(sockfd,
"", 1);
/* send 1-byte datagram */
n = Read(sockfd, recvline, MAXLINE);
recvline
=
'\0';
/* null terminate */
Fputs(recvline, stdout);
exit(0);
}
udp_server.c代码:
/* include udp_server */
#include "unp.h"
int udp_server(const char *host, const char *serv, socklen_t *addrlenp)
{
int
sockfd, n;
struct addrinfo
hints, *res, *ressave;
bzero(&hints,
sizeof(struct addrinfo));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
if ( (n = getaddrinfo(host, serv, &hints, &res)) !=
0)
err_quit("udp_server 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;
/* error - try next one */
if (bind(sockfd, res->ai_addr, res->ai_addrlen) ==
0)
break;
/* success */
Close(sockfd);
/* bind error - close and try next one */
}
while ( (res = res->ai_next) !=
NULL);
if (res ==
NULL)
/* errno from final socket() or bind() */
err_sys("udp_server error for %s, %s", host, serv);
if (addrlenp)
*addrlenp = res->ai_addrlen;
/* return size of protocol address */
freeaddrinfo(ressave);
return(sockfd);
}
/* end udp_server */
int Udp_server(const char *host, const char *serv, socklen_t *addrlenp)
{
return(udp_server(host, serv, addrlenp));
}
daitimeupdsrv2.c代码:
#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
len;
struct sockaddr_storage
cliaddr;
if (argc ==
2)
sockfd = Udp_server(NULL, argv[1],
NULL);
else
if (argc == 3)
sockfd = Udp_server(argv[1], argv[2],
NULL);
else
err_quit("usage: daytimeudpsrv [ <host> ] <service or port>");
for ( ; ; ) {
len =
sizeof(cliaddr);
n = Recvfrom(sockfd, buff, MAXLINE,
0, (SA *)&cliaddr, &len);
printf("datagram from %s\n", Sock_ntop((SA *)&cliaddr, len));
ticks = time(NULL);
snprintf(buff,
sizeof(buff), "%.24s\r\n", ctime(&ticks));
Sendto(sockfd, buff, strlen(buff),
0, (SA *)&cliaddr, len);
}
}
运行结果:
服务器:
➜ names ./daytimeudpsrv2 1399
datagram from 127.0.0.1:52995
datagram from 127.0.0.1:50425
客户端:
➜ names ./daytimeudpcli1 127.0.0.1 1399
sending to 127.0.0.1
Tue May 5 10:05:58 2015
➜ names ./daytimeudpcli2 127.0.0.1 1399
Tue May 5 10:06:04 2015
相关文章推荐
- 使用tcp_connect和tcp_listen的时间获取函数
- UNIX网络编程卷1 时间获取程序client TCP 使用非堵塞connect
- C#获取时间戳的封装方法函数+使用获取当前时间时间戳
- PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结
- Windows获取时间函数(使用GetLocalTime,GetSystemTime,SystemTimeToTzSpecificLocalTime,GetFileTime API函数
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
- 使用Java网络编程创建基于UDP协议的Server和Client
- socket C/C++编程(11)windows client端使用ip,port,通过connect()连接上linux server
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 收藏——在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 获取服务器的系统日期,出错时采用客户机系统时间。本函数支持MS SQL Server 版本。
- 获取函数使用时间(简单版)源代码
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 使用Apache 的 FTP Client获取FTP服务器上的文件列表FTP response 421 received.Server closed connection问题的解决
- 使用C的库函数获取当前本地时间
- 使用C的库函数获取当前本地时间
- client 和 server 通讯实例(使用 select 函数)
- UNIX网络编程卷1 时间获取程序客户端 TCP 使用非阻塞connect
- [C/C++]_[初级]_[使用C字符串(或者std::string)处理函数获取文件所在目录
- 使用JAVA NIO实现的UDP client和server