简单网络编程-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
;
}
本示例展示了如何生成一个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
;
}
相关文章推荐
- Java TCP网络编程 - 最简单示例
- Android网络编程之TCP通信----简单客户端与服务端通信
- linux 网络编程之最简单的tcp通信客户端
- Muduo 网络编程示例之一:五个简单 TCP 协议
- Python网络编程 3.1 由简单的TCP服务器、客户端程序分析相关方法
- Muduo 网络编程示例之一:五个简单 TCP 协议
- Python网络编程之TCP套接字简单用法示例
- Python简单网络编程示例【客户端与服务端】
- Java TCP网络编程 - 最简单示例
- Linux网络编程 3 - 简单的Tcp服务器和客户端编程
- 【网络编程笔记】简单的TCP协议 socket编程(C语言版服务器和客户端)
- Python学习笔记(二)网络编程的简单示例
- [Python]TCP编程的简单示例
- Linux 网络编程基础(一) ---------------客户端/服务器的简单实现
- C/C++ TCP客户端、服务器简单示例
- Java UDP网络编程 - 最简单示例(一)
- Linux网络编程-简单的客户端和服务器通讯程序开发入门(2)
- Windows网络编程入门:简单的客户端和服务器通信程序调试
- 网络编程-TCP服务器端程序和客户端程序
- 【Linux网络编程】基于TCP多进程(fork)版本客户端/服务器