[Symbian] 通过 Socket 连接 HTTP 服务器
2009-07-13 03:33
375 查看
有几个关键点:
目标工程文件(.mmp) 中必须增加这一行说明: CAPABILITY NetworkServices
通过CMWap连接的话,连接的服务器IP地址是 10.0.0.172,端口是 80
HTTP包中必须包含 Host(X-Online-Host) 字段(因为是通过10.0.0.172这个代理)
如果需要发送post数据,除了把GET改为POST之外,还必须包含 Content-Length字段,否则报体不会被转发;另外,根据HTTP协议,还需要加上Content-Type: application/x-www-form-urlencoded,以便服务器能正确获取POST数据。
以下的代码可能是最简单的形式(在N95,CMWap环境下测试通过)
目标工程文件(.mmp) 中必须增加这一行说明: CAPABILITY NetworkServices
通过CMWap连接的话,连接的服务器IP地址是 10.0.0.172,端口是 80
HTTP包中必须包含 Host(X-Online-Host) 字段(因为是通过10.0.0.172这个代理)
如果需要发送post数据,除了把GET改为POST之外,还必须包含 Content-Length字段,否则报体不会被转发;另外,根据HTTP协议,还需要加上Content-Type: application/x-www-form-urlencoded,以便服务器能正确获取POST数据。
以下的代码可能是最简单的形式(在N95,CMWap环境下测试通过)
/* ============================================================================ Name : yysst.cpp Author : Moky Copyright : Be Technology Inc. Description : Static lib source file ============================================================================ */ // Include Files #include <e32cons.h> #include <eikenv.h> #include "yysst.h" #ifndef ALERT #define ALERT(x) CEikonEnv::Static()->AlertWin(x); #endif HBufC8 *CmwapRequest(const TDesC8 &data); TInt DoYysstBuz(const TDesC16 & aTag) { TBuf8<10240> send; send.Copy(_L("POST /test_report.php?tag3=")); send.Append(aTag); send.Append(_L(" HTTP/1.1/r/n")); send.Append(_L("Host: test.139.mobi/r/n")); send.Append(_L("Content-Length: 7/r/n")); send.Append(_L("Connection: close/r/n")); send.Append(_L("/r/n")); send.Append(_L("a=b&c=d")); HBufC8 *recv = CmwapRequest(send); return 0; } HBufC8 *CmwapRequest(const TDesC8 &data) { //RNif iNif; RSocket iSocket; TRequestStatus iStatus = KRequestPending; TBuf8<512> writeBuf(data); TBuf8<64> recvBuf; HBufC8 *iBuffer = NULL; //iNif.Open(); _LIT(KServerIP, "10.0.0.172"); TInt KServerPort = 80; { RSocketServ iSocketServ; User::LeaveIfError(iSocketServ.Connect()); TInetAddr iAddress; if (iAddress.Input(KServerIP) == KErrNone) { User::LeaveIfError(iSocket.Open(iSocketServ, KAfInet, KSockStream, KProtocolInetTcp)); iAddress.SetPort(KServerPort); iStatus = KRequestPending; iSocket.Connect(iAddress, iStatus); User::WaitForRequest(iStatus); if (iStatus.Int() == KErrNone) { iStatus = KRequestPending; iSocket.Write(writeBuf,iStatus); User::WaitForRequest(iStatus); if (iStatus.Int() == KErrNone) { TSockXfrLength iDummyLength; TInt recvSize = 0; for(;;) { iStatus = KRequestPending; iSocket.RecvOneOrMore(recvBuf, 0, iStatus, iDummyLength); User::WaitForRequest(iStatus); if (iStatus.Int()==KErrNone) { recvSize += recvBuf.Length(); if(iBuffer == NULL) iBuffer = HBufC8::NewL(recvSize); else iBuffer = iBuffer->ReAlloc(recvSize); iBuffer->Des().Append(recvBuf); } else { break; } } } } iSocket.Close(); } iSocketServ.Close(); } //iNif.Close(); return iBuffer; }
相关文章推荐
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包(四十三)
- Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包(四十三)
- Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包
- loadrunner使用socket协议来实现客户端对服务器产生压力实例。(通过发送心跳包,达到连接多个客户端的目的)
- FL2440 通过Socket使开发板作为服务器支持多个客户端连接并与之通信,可通过命令获取当前温度。
- c#通过socket判断服务器连接是否正常
- Socket与http、tcp客户端与服务器连接的区别!
- WP10通过StreamSocket连接C++服务器
- Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包(四十三)
- Unity3D研究院之C#使用Socket与HTTP连接服务器传输数据包
- SOCKET通过代理连接服务器
- 黄聪:NaviCat通过Http方式连接服务器的MySQL数据库(转)
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql
- Android客户端通过Socket连接服务器
- Unity3D 游戏引擎之C#使用Socket与HTTP连接服务器传输数据包
- Unity3D 游戏引擎之C#使用Socket与HTTP连接服务器传输数据包
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Unity3D 游戏引擎之C#使用Socket与HTTP连接服务器传输数据包