简单网络编程-TCP客户端示例
http://blog.csdn.net/is2120/archive/2011/05/22/6438034.aspx
本示例展示了如何生成一个client socket,连接到一个 http server,并从 http server 上下载一个文件。
simple http client
一个简单的TCP CLIENT
程序流程:
1.
初始化 winsock
library
2.
创建一个
IPPROTO_TCP_SOCKET
套接字。(
使用socket)
3.
通过
gethostbyname()
和 gethostbyaddr()
获取主机信息
4.
使用我们创建的socket
通过connect()
连接到服务器
5.
通过send()
、recv()
收发数据直到tcp chat
结束
6.
使用closesocket()
关闭连接。
7.
释放资源:winsock
library
。(
使用 WSACleanup())
#include
<cstdio>
#include
<afx.h>
#include
<winsock2.h>
//z 2011-05-22 16:39:41@is2120
#pragma comment(lib,
"ws2_32"
)
#pragma comment(lib,
"MSVCRT"
)
int
main()
{
WSADATA wsaData;
char
strSrv[] = "www.vckbase.com"
;
int
wsaret = WSAStartup(0x0101
,&wsaData);
struct
hostent* hp;
unsigned
int
addr;
struct
sockaddr_in server;
char
buff[512
] = {'/0'
};
int
y = 0
;
if
(wsaret)
{
return
-1
;
}
SOCKET conn;
conn = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if
(conn == INVALID_SOCKET)
{
return
-1
;
}
if
(inet_addr(strSrv) == INADDR_NONE)
{
hp = gethostbyname(strSrv);
}
else
{
addr = inet_addr(strSrv);
hp=gethostbyaddr((char
*)&addr,sizeof
(addr),AF_INET);
}
if
(hp == NULL
)
{
closesocket(conn);
return
-1
;
}
//z 初始化 server 地址。
server.sin_addr.s_addr=*((unsigned
long
*)hp->h_addr);
server.sin_family=AF_INET;
server.sin_port=htons(80
);
if
(connect(conn,(struct
sockaddr*)&server,sizeof
(server)))
{
closesocket(conn);
return
-1
;
}
sprintf(buff,"GET
%s
/r/n/r/n
"
,"/image/mlogo.gif"
);
send(conn,buff,strlen(buff),0
);
CFile f;
f.Open("c:
//
c.gif"
,CFile::modeCreate | CFile::modeWrite);
while
(y=recv(conn,buff,512
,0
))
{
f.Write(buff,y);
}
f.Close();
closesocket(conn);
return
0
;
}
@IS2120#CNBLOGS.T2169364049[T1,L65,R1,V259]:备忘
$ € ₤ ₭ ₪ ₩ ₮ ₦ ₱ ฿ ₡ ₫ ﷼ ¥ ﷼ ₫ ₡ ฿ ₱ ₦ ₮ ₩ ₪ ₭ ₤ € $