
socket
文章平均质量分 64
tg2003
这个作者很懒,什么都没留下…
展开
-
如何利用socket进行HTTP访问
平常我们要访问某个URL一般都是通过浏览器进行:提交一个URL请求后,浏览器将请求发向目标服务器或者代理服务器,目标服务器或者代理服务器返回我们所需要的数据,浏览器接收到这些数据后保存成文件并进行显示。下面我们看看如何自己利用winsock2.h中的接口来实现这个功能?为了简化问题,作以下假设:通过代理服务器进行HTTP访问,这样就省去了对URL进行DNS解析的步骤,假设代理服务器的地址为转载 2008-10-28 00:31:00 · 936 阅读 · 0 评论 -
很好很强大的cUrl库
<br />貌似以前使用过cUrl,不过没读过源码,记得以前到是看过wGet的源码,不过那个程序是单线程的。这次无意中发现cUrl的源码居然有Windows版的,到http://curl.haxx.se/下了个最新版的源码下来,源码是用VC6编译的,我在VS2005下重新进行编译,居然只有一个警告。<br /> <br />cUrl的实现代码是放在动态库中,将动态库以静态方式编译生成libcurl.lib,然后将cUrl源码目录下的“include/curl”文件夹复制到自己的项目下(如图1)。<br />原创 2011-04-12 05:59:00 · 7961 阅读 · 0 评论 -
还是获取网页的问题,不过是多线程
<br />09年我在这个问题上折腾了大半年,还因此写了篇博文[这下该不会阻塞了吧],最初的是想实现多线程下载网页源码,但经过对HTTP协议的学习,发现只有支持断点继传的网站才用得上多线程下载,因此又把需求放在批量快速下载网页源码上,比如我同时需要访问100个网页,如果用IdHttp就头大了,Idhttp就连访问302页面也会出现异常,调试起来很麻烦。而用自己写的TWinHttp类,recv函数阻塞的问题是能解决了,但如果短时间频繁的获取网页源码,50%以上的访问都会出现connect失败和recv超时原创 2011-04-08 05:13:00 · 1335 阅读 · 1 评论 -
在socket中用http代理访问网页的关键问题
<br />以前关注过在socket使用http代理访问网页的问题,原理很简单,就是非代理情况下connect的是目标网页的IP和端口,而使用代理则connect代理IP和端口,连接成功后就直接send数据了。<br /> <br />原理清楚,但一直没应用过,今天正好需要就测试了一下,结果在http代理可用,connect正常的情况下,send数据后总是返回http/1.1 400。最后在一个帖子中找到了原因所在,其实使用http代理来发送GET或POST,其包的格式与非代理的GET或POST有一些区别,原创 2011-03-29 05:35:00 · 1559 阅读 · 0 评论 -
这下该不会阻塞了吧
socket编程阻塞的问题搞了我几个月,这段时间实在是太漫长了,其实我只是需要一个很简单的函数,那就是获取网页源码,就是一个这么简单的需要,我搞了几个月。 最初我把所有的socket函数放入一个线程,在线程中设置超时时间,但这样会遇到一个问题,如果线程的超时时间设为30秒,30秒没接收完成就表达失败,但在正常情况下网页文件在30秒内也有可能接收不完,所以这个方法宣告失效。 接着原创 2009-11-04 04:53:00 · 1810 阅读 · 3 评论 -
多线程下载原理
各个线程任务分配是这样实现的。在开始下载时,文件平均分成若干块进行下载。如第一个线程一开始的任务是从文件的0位置开始下载一直到72908位置处。线程1每次下载一块数据后就要调整任务,如第一次下载了20800字节的数据,那么线程1的任务将改为:20800-72908。如此下去,直到任务为72908-72908时表示线程1完成了当前的下载任务。此时,线程1就分析各个线程的任务,找出任务最为繁忙原创 2009-06-17 23:04:00 · 889 阅读 · 2 评论 -
[转]直接用socket实现HTTP协议(下载专用)
下载源代码 从HTTP服务器上下载一个文件有很多方法,“热心”的微软提供了 WinInet 类,用起来也很方便。当然,我们也可以自己实现这些功能,通过格式化请求头很容易就能实现断点续传和检查更新等等功能 。本文附带的工程中有一个支持 HTTP1.1 协议,直接用 Socket 实现下载功能的 DLL,实现了以下功能:连接主机格式化请求头设置接收,发送超时原创 2009-02-27 17:06:00 · 830 阅读 · 0 评论 -
原始套接字透析之实现Ping
极其常用的Ping命令通过向计算机发送ICMP Echo请求报文并且监听回应报文的返回,以校验与远程计算机或本地计算机的连接。 使用ICMP.DLL实现Ping 在Windows平台编程中实现Ping的一个最简单方法是调用ICMP.DLL这个动态链接库,引用ICMP.DLL中的三个函数即可:HANDLE IcmpCreateFile(void); 这个函数打开个ICMP E原创 2008-12-16 17:37:00 · 854 阅读 · 0 评论 -
Socket实现非阻塞连接
#include #include #include #include #pragma comment(lib, "ws2_32.lib") #define TIME_OUT_TIME 20 //connect超时时间20秒void geturl(char *url) { WSADATA WSAData={0}; SOCKET sockfd; struct sock原创 2009-02-25 16:27:00 · 2743 阅读 · 0 评论 -
又是三天,socket下载图片的问题总算搞定了
不知不觉,三天的时间又过去了。这三天只做了一件事,那就是解决用socket下载图片并显示的问题。最初连怎么在SDK显示JPG/GIF图片的方法也不知道,只有不停的百度,不停的Google,本来以为这个问题比前两天MD5的问题简单,因为网上应该有现成的资料,但却硬是花了我整整三天的时间。不知是我找资料的能力有问题,还是基础知识实在太差,MSDN的强大功能又基本不会用。本来连我自己都认为这是一原创 2008-11-28 00:20:00 · 883 阅读 · 0 评论 -
一个Socket网络编程的简单例子
服务器端源码:#include #include #include #pragma comment(lib, "ws2_32.lib") int main(void){ WORD wVer; WSADATA wsaData; int err; wVer = MAKEWORD(2, 1); err =原创 2008-10-28 00:51:00 · 720 阅读 · 1 评论 -
初探Socket网络编程
学C++之前,就想用C++写一个网络软件,到达目的地的路很多,但我选择了学C++来达到我的目的。虽然用VB或Delphi来写我的这个网络软件,会更快更便捷,不过我还是选择了C++。走上C++之路,要想写一个Windows下的软件,要学的实在太多了。首先要学SDK,学会用API函数来写软件的界面,但学SDK要有C语言的基础,如果C语言基础不好,还得返回去恶补C语言基础。学了SDK,虽然能写Win原创 2008-10-27 01:45:00 · 733 阅读 · 1 评论