VB6 简单的HTTP微服务器
vb吧
全部回复
仅看楼主
level 11
余思培 楼主
前话:
近期疫情闲来无事,就想着学一下我之前一直避开的网络编程方面的内容,然后在网上找资料时发现初学时写一个HTTP微服务器还算比较经典,然后我就先“跟着”教程写了一遍(之前对网络编程完全不懂,我这个跟着除了看解析,另外就是Ctrl+C/V,cpp代码),然后我想着要不试下用VB也来写一个?于是就有了下面这个
2022年09月13日 11点09分 1
level 11
余思培 楼主
另外我用手机浏览器也尝试访问无误
2022年09月13日 11点09分 2
level 11
余思培 楼主
另外:
1.这个HTTP微服务器对于一些其他类型的连接没做处理,如果连接应该可能出现问题
2.我没有选择使用WinSocket控件,这个是个人原因,不太习惯用控件,用控件来写,应该可能会更简单
3.感觉大佬YY菌的提醒,之前尝试时线程阻塞,多线程不稳定,胎神的我甚至想用多进程来输出提示信息,后来采用了线程不阻塞的模式来处理
2022年09月13日 11点09分 3
level 11
余思培 楼主
前面CPP跟着网上的代码如下(部分)
2022年09月13日 12点09分 4
level 11
余思培 楼主
由于没有使用控件,API声明如下:
2022年09月13日 12点09分 5
level 11
余思培 楼主
为了便于调试,在模块中使用了一下属性,部分属性如下:
2022年09月13日 12点09分 6
level 11
余思培 楼主
由于模块比较大,我把答复请求和部分计算单独分出成两个独立模块
2022年09月13日 12点09分 7
level 11
余思培 楼主
简单的处理了一下请求,部分代码如下:
2022年09月13日 12点09分 8
level 11
余思培 楼主
启动服务器如下
2022年09月13日 12点09分 9
level 11
余思培 楼主
目前,还有部分内容未完成,但代码中均有注释
另外由于非阻塞模式的处理是通过消息进行分发的,而我在消息处理时没有处理好,故还是有一些bug
另外目前的答复只做了测试页面的,其他读取文件的暂时还没添加,404页面也还暂时没写。
另外,这是一个局网服务器。
说到这里,不得不吐槽一下,去年我想尝试手机和PC通信,通过网页也可以,但是在VB6上我不知道怎么做,结果用ASPX.NET+VB.NET去完成,另外由于当时主要的通信目的是让PC端播放多媒体,然而当时.net我又不熟悉,又通过进程通信调用VB6的程序来完成......好了,现在就简单了,VB自己去处理网页请求就可以了[喷]
2022年09月13日 12点09分 10
level 11
余思培 楼主
okay,话说了这么多,如果有兴趣的话,链接如下:
通过百度网盘分享的文件:VB测试分享
链接:网页链接
提取码:hvj3
复制这段内容打开「百度网盘APP 即可获取」
2022年09月13日 12点09分 11
level 11
余思培 楼主
另外提一句,线程阻塞有阻塞的好处,不阻塞也有不阻塞的好处,主体功能完成后,我准备改回阻塞式的,然后取消窗体,信息输出到日志文件中去
2022年09月13日 12点09分 12
阻塞通信没有任何一点好处,可以说阻塞通信的方案甚至比VB6的WinSock控件还要差,WinSock控件是每条连接一个窗口,阻塞通信那是每条连接一个线程啊,线程的开销比窗口大多了。
2023年04月05日 15点04分
不要窗口的方案,我推荐使用重叠IO模型(这个对磁盘文件也通用),重叠IO模型有两种比较好的方案,单线程适合APC方案,多线程适合IOCP方案。APC的话是在你SleepEx、WaitForXXXEx的时候给你回调(只在调用线程回调),而IOCP则是自己主动取等,但它可以支持同时多个线程等待,实现很好的均衡负载。
2023年04月05日 15点04分
level 6
你有试过到外网部署吗,会不会有粘包的情况(在post的情况)
2022年09月13日 12点09分 13
level 11
余思培 楼主
@KSPprince
由于百度过于XX,我这边看不到你的回复楼层,但是能看到回复内容,我就另起一楼回复你
1.我没有尝试我外网,部署,只在局网尝试过,另外刚刚才解除网络编程,很多东西不是很懂
2.对于粘包,这个这个之前确实确实没有考虑到,但是Post请求我记得没错的话好像有Content-Length项,记录了Post的大小,应该可以用这个强行分割......或许吧[笑尿]
3.我这个只是初学时尝试用VB做的一个,很多内容没有填充,很多错误陷阱也没有预设,也没有进行优化。
2022年09月13日 13点09分 14
[呵呵]看了下代码,写的非常好,nice,本来想到外网测试下的,可是我的服务器上个月过期了,等过段时间测试下
2022年09月15日 00点09分
level 12
netbox.cn
2022年09月13日 23点09分 15
我就一自学编程自学网络编程的,哪用的上这么高大上的东西,再说我之所以喜欢API而不是控件就是因为用API可以学习更多细节
2022年09月14日 01点09分
1 2 尾页