您的位置:首页 > 理论基础 > 计算机网络

简单网络编程-TCP客户端示例

2011-05-22 17:17 549 查看
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
;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: