2015.01.13
// ConsoleApplication2_HttpClient.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string.h>
/*
* 客户端
*/
#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib,"Ws2_32.lib")
int main2(){
SOCKET sSocket = INVALID_SOCKET;
SOCKADDR_IN stSvrAddrIn = {0}; /* 服务器端地址 */
char sndBuf[1024] = {0};
char rcvBuf[2048] = {0};
char *pRcv = rcvBuf;
int num = 0;
int nRet = SOCKET_ERROR;
int nSend = NULL ;
WSADATA wsaData;
/* HTTP 消息构造开始,这是程序的关键之处 */
sprintf( sndBuf, "POST / HTTP/1.1\n");
strcat( sndBuf, "Host: localhost\n");
strcat( sndBuf, "Path: trafficSynchronization/gps/sendTest.jsp\n\r\n");
//strcat( sndBuf, "Host: localhost\n\r\n");
//strcat( sndBuf, "Host: localhost/n/r/n");
/* HTTP 消息构造结束 */
/* 发送内容 */
printf("\nsndBuf = %s\n", sndBuf);
/* socket DLL初始化 */
WSAStartup(MAKEWORD(2, 0), &wsaData);
stSvrAddrIn.sin_family = AF_INET;
stSvrAddrIn.sin_port = htons(8080);
// stSvrAddrIn.sin_addr.s_addr = inet_addr("202.108.9.51");
// stSvrAddrIn.sin_addr.s_addr = inet_addr("60.207.246.98");
// stSvrAddrIn.sin_addr.s_addr = inet_addr("192.168.100.1");
stSvrAddrIn.sin_addr.s_addr = inet_addr("192.168.1.133");
// stSvrAddrIn.sin_addr.s_addr = inet_addr("localhost");
// stSvrAddrIn.sin_addr.s_addr = inet_addr("217.147.180.114");
printf("\n准备进行 socket() 连接!\n");
sSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP);
if( sSocket == INVALID_SOCKET ){
printf("\nsocket 失败!");
printf("\n回车键继续 ...\n");
getchar();
return -1 ;
}
printf("\nsocket 成功!\n");
//printf("\n回车键继续 ...\n");
//getchar();
/* 连接 */
nRet = connect(sSocket, (SOCKADDR*)&stSvrAddrIn, sizeof(SOCKADDR));
if ( SOCKET_ERROR == nRet )
{
printf("connect fail!/n");
printf("\n回车键继续 ...\n");
getchar();
return -1;
}
/*
Connection 成功!
*/
printf("\nconnect 成功!\n");
//printf("\n回车键继续 ...\n");
//getchar();
/* 发送HTTP请求消息 */
nSend = send(sSocket, (char*)sndBuf, sizeof(sndBuf), 0);
if( nSend == NULL || nSend <= 0 ){
printf("\nsend 失败!");
printf("\n回车键继续 ...\n");
getchar();
return -1 ;
}
/*
send 成功!
*/
printf("\nsend 成功!\n");
//printf("\n回车键继续 ...\n");
//getchar();
/* 接收HTTP响应消息 */
// while(1)
// {
printf("\n.");
num = recv(sSocket, pRcv, 2048, 0);
printf("\nnum = %d", num );
//pRcv += num;
//if((0 == num) || (-1 == num))
// {
// break ;
// }
// }
/* 打印响应消息 */
printf("\n%s\n", rcvBuf);
/*
显示接收信息 成功!
*/
printf("\n回车键继续 ...\n");
getchar();
return 0;
}
void main1()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
char * sendData ;
char rcvBuf[2048] = {0};
char *pRcv = rcvBuf;
int num = 0;
int nRet = SOCKET_ERROR;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if( err != 0 ){
return;
}
if( LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2 ){
WSACleanup();
return;
}
/*
socket 连接
*/
SOCKET sockClient = WSASocket( AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED );
SOCKADDR_IN addrClient; // 服务器地址信息
addrClient.sin_addr.S_un.S_addr = inet_addr("192.168.100.1"); // 要连接的服务地址
addrClient.sin_family = AF_INET; // 协议族
addrClient.sin_port = htons(80); // 请求的端口
char sendBuffer[1024]; // 每次发送的最大数据量
nRet = connect( sockClient, (SOCKADDR*)&addrClient, sizeof(SOCKADDR) ); // 连接服务器端
if( nRet == NULL ){
printf("\n连接失败!");
printf("\n回车键继续 ...\n");
getchar();
return ;
}
printf("\n已连接,nRet = ");
printf( (char*)nRet );
printf("\n回车键继续 ...\n");
getchar();
/*send data to service*/
//printf("Please input data:\n");
//sendData = gets(sendBuffer);
//printf( strcat( sendData , " - Please input data:\n"));
//while(true)
//{
// printf("%s/n", sendBuffer);
if( gets( sendBuffer ) == NULL) // 输入要发送的数据
printf("NULL\n");
// break;
else
{
if( SOCKET_ERROR == send(sockClient,sendBuffer,
strlen(sendBuffer)+1, 0 )) // TCP方式发送
{
printf("Transmission data defeat!\n");
// break;
}
else{
printf( sendBuffer );
}
}
// }
/* 接收HTTP响应消息 */
while(1)
{
printf(".");
num = recv(sockClient, pRcv, 2048, 0);
pRcv += num;
if((0 == num) || (-1 == num))
{
break ;
}
}
/* 打印响应消息 */
printf("%s/n", rcvBuf);
closesocket( sockClient ); // 严格来说这里需要加错误检测 if(0 != closesocket(socket)){}
WSACleanup();
printf("\n回车键退出 ...\n");
getchar();
return ;
}