参考文章:http://blog.csdn.net/wangningyu/article/details/4526551
注意:原文将回车换行符写成了/r/n,我使用时,程序异常,将其改成\r\n即可。
----------------------------------------------------------------------------------------------------------------------------------------------------------
html 登录页面截图:
---------------------------------------------------------------------------------------------------------------------
登录页面表单源码:
<form action="/hyx/WanJiaLoginServlet" method="post">
<label>账号:<span></span></label>
<input type="text" name="userName" maxlength="20" value="zhang3"/>
<label>密码:<span></span></label>
<input type="password" name="userPass" maxlength="30" value="123456"/>
<input type="submit" value="登陆" name="submit" class="submit"/>
<a href="wanjiaReg.jsp">注册</a>
<a href="/hyx/index.html">首页</a>
</form>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
点登录时,使用Fildder抓到的包如下:
POST http://407a08:8080/hyx/WanJiaLoginServlet HTTP/1.1
Host: 407a08:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://407a08:8080/hyx/wanjia/wanjiaLogin.jsp
Cookie: JSESSIONID=8DFF29BB78EEEE2FDE7CE3302B1821F7
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
userName=zhang3&userPass=123456
-------------------------------------------------------------------------------------------------------------------------------
点登录时,使用Fildder抓到的服务器返回的包如下:
HTTP/1.1 302 Moved Temporarily
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A3EE2EA6D26871AD9E65B74E95A32FDE; Path=/hyx
Location: http://407a08:8080/hyx/wanjia/flex/index.html
Content-Length: 0
Date: Tue, 03 Jun 2014 12:11:57 GMT
---------------------------------------------------------------------------------------------------------------------------------
Fiddler抓包截图:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
清楚了提交给服务器的包,接下来可以写程序进行提交了,代码如下:
#include "stdafx.h"
#include "stdio.h"
#include "winsock2.h"
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
char* host_name="192.168.47.18";
char* req=
"POST http://407a08:8080/hyx/WanJiaLoginServlet HTTP/1.1\r\n"
"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,\r\n"
"Referer:http://192.168.47.17:8080/hyx/admin/login.jsp\r\n"
"Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3\r\n"
"Content-Type:application/x-www-form-urlencoded\r\n"
"Accept-Encoding:gzip, deflate\r\n"
"User-Agent:Mozilla/5.0 (Windows NT 5.1; rv:29.0) Gecko/20100101 Firefox/29.0\r\n"
"Host:407a08:8080\r\n"
"Content-Length:31\r\n"
"Connection:keep-alive\r\n"
"Cookie:JSESSIONID=F78B7D4C76181B5B08485246CE9FF8AE\r\n\r\n"
"userName=zhang3&userPass=123456";
// 初始化套接字
if(WSAStartup(MAKEWORD(2,2),&wsadata))
printf("初始化SOCKET出错!");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent为空!");
hsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(8080);
//saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
saServer.sin_addr.S_un.S_addr=inet_addr(host_name);
// 利用SOCKET连接
nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(saServer));
if(nRet == SOCKET_ERROR)
{
printf("建立连接时出错!errorCode=%d ",WSAGetLastError());
closesocket(hsocket);
system("pause");
return 0;
}
// 利用SOCKET发送
nRet = send(hsocket,req,strlen(req),0);
if(nRet==SOCKET_ERROR)
{
printf("发送数据包时出错!");
closesocket(hsocket);
system("pause");
}
printf("发送数据包完毕!nRet=%d \n",nRet);
char Dest[3000];
nRet=1;
while(nRet>0)
{
// 接收返回数据包
nRet=recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);
if(nRet>0)
Dest[nRet]=0;
else
Dest[0]=0;
// 显示返回数据包的大小、内容
printf("返回数据包的大小,nRet=%d \n",nRet);
printf("返回数据:%s \n",Dest);
}
getchar();
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
效果截图如下:
-----------------------------------------------------------------------------------------------------------------------------------------
您的十分满意是我追求的宗旨。
您的一点建议是我后续的动力。