



















































































注:下面这一段如果看起来有点麻烦的话可以写简单些,就让其只解析ipv4类型地址,端口号为13,只连接一次














简单点的:









下面是用winsock api(阻塞模式) 所写的代码,可以比较一下
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
if(argc<2)
{
std::cout << "usage: tcp_datatime hostname(time-a.nist.gov) " << std::endl;
return -1;
}
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
std::cout << " lib error ";
return -1;
}
SOCKET cliSocket;
cliSocket = socket(AF_INET, SOCK_STREAM,0);
SOCKADDR_IN addr;
memset(&addr,0, sizeof(addr));
addr.sin_port = htons(13);
addr.sin_family = AF_INET;
if( (addr.sin_addr.s_addr = inet_addr(argv[1])) == INADDR_NONE)
{
hostent * hostent;
hostent = gethostbyname(argv[1]);
if(hostent == NULL)
{
std::cout << " can't resolve host! " ;
return -1;
}
memcpy(&addr.sin_addr,hostent->h_addr_list[0],4);
}
if( connect(cliSocket, (sockaddr*)&addr,sizeof(sockaddr)) != 0)
{
std::cout << "connect error ";
return -1;
}
char buf[100];
int recvSize = recv(cliSocket, buf, sizeof(buf), 0);
buf[recvSize] = 0;
std::cout << buf << std::endl;
return 0;
}
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
if(argc<2)
{
std::cout << "usage: tcp_datatime hostname(time-a.nist.gov) " << std::endl;
return -1;
}
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
std::cout << " lib error ";
return -1;
}
SOCKET cliSocket;
cliSocket = socket(AF_INET, SOCK_STREAM,0);
SOCKADDR_IN addr;
memset(&addr,0, sizeof(addr));
addr.sin_port = htons(13);
addr.sin_family = AF_INET;
if( (addr.sin_addr.s_addr = inet_addr(argv[1])) == INADDR_NONE)
{
hostent * hostent;
hostent = gethostbyname(argv[1]);
if(hostent == NULL)
{
std::cout << " can't resolve host! " ;
return -1;
}
memcpy(&addr.sin_addr,hostent->h_addr_list[0],4);
}
if( connect(cliSocket, (sockaddr*)&addr,sizeof(sockaddr)) != 0)
{
std::cout << "connect error ";
return -1;
}
char buf[100];
int recvSize = recv(cliSocket, buf, sizeof(buf), 0);
buf[recvSize] = 0;
std::cout << buf << std::endl;
return 0;
}