用socket来从服务器拿数据
来源:互联网 发布:网上寺院软件下载 编辑:程序博客网 时间:2024/05/29 02:10
需求:从一个在线服务器的特定URL内获得一个xml数据包,并提取其中一个节点的值。
用到的技术:socket.
用到的工具: VS2008
因为我们是客户端,所以我们只需要建立与服务器端的socket,发送请求,处理返回的包就可以了。
Q1:本人一开始不懂socket,从网上寻找到可以跨平台的socket代码,但是不知道函数调用顺序。
A1:首先要在windows下面初始化winsock,可以使用WSAStartup。然后创建socket,连接服务器和端口,接着就可以send/recv了。
Q2: 需要向某一个URL发送请求命令,但是不知get头应该如何组合。
A2:参考http://www.cnblogs.com/citygs/archive/2011/11/23/2260374.html 即可。注意get最后要有一个空行,既最后一定是\r\n\r\n.我的命令是char sendBuf[] = "GET /StableWSDiscoveryEndpoint/schemas-xmlsoap-org_ws_2005_04_discovery HTTP/1.1\r\n\r\n";
Q3: 接受数据包的时候,最后总会丢掉一部分内容。
A3:这个是我使用的socket是在同步模式。解决方法有2:1,让你的buff足够大,一次就可以完全接受完数据包的内容。2,使用异步模式的socket,可以参考http://www.cnitblog.com/guopingleee/archive/2008/09/19/49290.aspx。我这里使用的是加大我的buff,这样可以最简单最方便的处理这个问题。
跨平台socket实现: http://my.oschina.net/odison/blog/9439?from=rss
收发数据包实现:
LCL_data原创于CSDN blog,转载请注明。
// WinMacSocket.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "socket.h"#include <iostream>#include <string>char sendBuf[] = "GET /StableWSDiscoveryEndpoint/schemas-xmlsoap-org_ws_2005_04_discovery HTTP/1.1\r\n\r\n";char recvBuf[4096];int _tmain(int argc, _TCHAR* argv[]){WSScocket socket;if(socket.Init() == 0){if (!socket.Create(AF_INET,SOCK_STREAM,IPPROTO_IP)){return -1;}if(!socket.Connect("150.245.177.13",80)){return -1;}int sendCount = socket.Send(sendBuf,sizeof(sendBuf),0);std::string receive;int recvBytes;do {recvBytes = socket.Recv(recvBuf,sizeof(recvBuf),0);if(recvBytes == SOCKET_ERROR || recvBytes == 0) // 0 means socket close.{break;}receive += std::string(recvBuf);std::cout<<recvBuf<<std::endl;} while (recvBytes > 0);socket.Close();socket.Clean();}return 0;}
LCL_data原创于CSDN blog,转载请注明。
- 用socket来从服务器拿数据
- 用非阻塞socket来从服务器拿数据
- 从服务器上拿数据下来.
- ajax从服务器拿了数据回来循环显示在HTML后不能响应事件
- android socket用TCP方式,client端怎么监听服务器发送来的数据
- 用socket从服务器读取时间
- 怎样从远程服务器上拿文件下来
- 从服务器上拿日志文件的命令
- 从ldap xmpp中拿数据插入到数据库中
- 从ldap xmpp拿数据保存为csv文件
- highcharts和dwr实现从数据库拿数据绘图
- 从数据库中拿数据,显示到listview上
- Android----通过接口从网上拿数据(一)
- 用ACE从Web服务器抓数据
- 用ACE从Web服务器抓数据
- 从服务器暴露数据
- 从服务器获取数据
- 从服务器请求数据
- java高级应用--File + RandomAccessFile
- MySQL的事件调度器
- SHH2整合问题之JSP无法显示
- Hibernate 延迟加载剖析与代理模式应用
- C#正则表达式整理备忘
- 用socket来从服务器拿数据
- 测试中V模型
- AAA认证、授权、计费
- 编写并安装int 7ch中断例程,功能为显示一个用0结束的字符串,中断例程安装在0:200处
- 禁止页面使用backspace返回到上一级目录
- matlab创建动态链接库时遇到的两个问题
- rh5安oracle总结——上下键不能用、ed命令、无法本地启动ODBC
- vim tips
- NIOP 1999 导弹问题 最长升降序子序列 DP[小思路]