首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB应用winsock控件的一些疑问

2013-01-04 
VB使用winsock控件的一些疑问本帖最后由 gam2046 于 2009-12-20 09:13:28 编辑想写一个C/S结构的程序,使用

VB使用winsock控件的一些疑问
本帖最后由 gam2046 于 2009-12-20 09:13:28 编辑 想写一个C/S结构的程序,使用VB+WINSOCK,大致的目标就是和学校里的机房使用的这类管理系统差不多(不包含屏幕监控,自知在截屏、压缩方面VB的效率很低,难以完成正常使用,功能需要有:对远程计算机的文件管理,即可查看、上传、下载,并且可面对多个客户的连接、)
1.关于客户端连接问题:
客户端的窗体载入事件:


    SockServer.RemoteHost = "127.0.0.1"
    SockServer.RemotePort = 2046
    SockServer.Connect
    SockServer.SendData "info:"

服务端的窗体载入事件:

With SockClient
    .LocalPort = 2046
    .Listen
End With

我先运行服务端,然后运行客户端,但是客户端总是提示:
实时错误‘40006’:所需事物或请求的错误协议或连接状态
之后定位在代码SockServer.SendData "info:"处,
之后我进行单步调试,当进行到SockServer.SendData时(显示为黄色),我等待了数秒钟,再按F8竟然连接成功了。
请问一下这是什么问题?

2.关于多客户连接的问题
如上所述,这样只能建立一对一的连接,当服务端进行listen方法时,若已经有一个connect请求,且请求成功,那么若有第二个甚至更多的请求就会失败,请问怎么实现能够有多个客户端同时连接?并且服务端可选择在已连接的客户中进行数据传递?

3.关于判断客户身份问题
当完成第二个问题后,如何确认请求连接者的身份?(即同一个人打开多个程序,只有一个能连接),并且通过什么来分辨各个连接者,例如:还需要能与指定连接者断开连接。最好能将连接者保存在一个list里,方便对不同的连接者进行操作

4.这个其实和winsock关系不大
如果在客户端获得磁盘列表(例如存在哪几个盘),然后发送给服务端,当服务端收到数据后(例如保存在drivelist控件),选择一个分区后发送给客户端,客户端再把相应的文件列表送到服务端(例如保存在fileslist控件),以此类推。
简而言之,就是能完成一个像木马一样的文件管理的功能,这个应该怎么实现?如果能加上上传下载的功能更好了。
[解决办法]
针对你的的第一问题本人有如下理解:你的客户端请求连接代码和发送数据代码为顺序结构,单执行完成连接请求代码以后立即执行发送代码 由于客户端发送连接请求到服务器端接受连接请求时间叫长,也就是说客户端在执行发送数据时候,客户端和服务器端连接还没有建立成功。改进意见思路:将客户端请求连接和发送数据代码分开写或者延时执行。确定客户端的winsock状态属性=7的时候才进行数据发送。
针对你的第二个问题可以在服务器端建立winsock控件数组。不同的客户端对不同的winsock进行独立连接和数据传输。
至于你的第三个问题我理解为你为了防止重复发送连接请求,如果你第二个问题解决了第三个问题就很好解决。你在客户端请求连接的前面加上winsock的状态属性作为条件。如果winsock.satae<>7 则执行连接请求
第四个问题不了解不好意思。

热点排行