当前位置:编程学习 > VB >>

使用winsock实现多站点向服务器发送数据的问题

我需要从各站点(约700个)定时将一些数据上送到服务器,服务器接收后拆包并写入数据库;但,无论怎样,现在站点发送来的数据(myclient.senddata)都不能激活服务器的data_arrive事件。请各位XDJM帮忙看看代码,感谢。
服务器端:

Private Sub Form_Load()

    intMax = 0
    myServer(0).LocalPort = "8888"
    myServer(0).Listen
End Sub

Private Sub myserver_ConnectionRequest(Index As Integer, ByVal requestID As Long)
     
     If Index = 0 Then
      intMax = intMax + 1
      Load myServer(intMax)
      myServer(intMax).LocalPort = "8888"
      myServer(intMax).Close
      myServer(intMax).Accept requestID
      
      'Load myServer(intMax)
    End If
End Sub

Private Sub myServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    
    Dim strGet As String
'接收字符串并写入strGet
    myServer(Index).GetData strGet
'解包字符串

end sub

客户端:

Private Sub Form_Load()
    myclient.RemoteHost = "192.168.1.111"
    myclient.RemotePort = "8888"
    myclient.Connect
End Sub
Private Sub myclient_connect()
    Dim strDay As String
    Dim strMonth As String
    
    strDay = Getday
    strMonth = getMonth
        myclient.senddata strDay 
        myclient.senddata strMonth 
    
        myclient.close
End Sub

请问到底是什么问题啊??? --------------------编程问答-------------------- myServer(intMax).Accept requestID
之后,debug一下myServer(inMax).state --------------------编程问答-------------------- 另外,
myServer(intMax).LocalPort = "8888"
 可以注释掉,它不需要设置localport,可以直接accept --------------------编程问答-------------------- 老兄,还是不行啊。
关键现在是客户端senddata后,服务器状态马上由7变为8了,干脆就没有触发data_arrive事件啊,
求帮忙啊? --------------------编程问答-------------------- 建议这种服务程序不要用 VB 来做,特别是想运用到 Internet 上比较多用户的情况,更加不要考虑用 VB 来做,因为会非常不稳定。就不说 Internet,我曾经用过 VB 的控件数组技术编写过 http、ftp、http 代理的服务程序,结果没有一个是可以稳定的,即使是本机上调试。比如 http 代理,页面内容少可以使用,但是当页面元素比较多的时候,vb 根本就处理不过来,经常会丢失连接请求或响应事件。
如果你了解 sock 异步方式和堵塞方式就能够明白,这种异步方式效率的确不高,建议用线程池管理技术来做 sock 服务程序,这样才可以做出比较稳定可靠的服务程序,而这种技术在 vb 里实现是比较困难的,而且效率也不高。
相对来说,每种开发工具都有自己的优势或缺陷,vb 网络服务开发这方面是没有优势的,建议换 c/c++ 类开发工具比较合适。 --------------------编程问答--------------------
引用 4 楼 supermanking 的回复:
建议这种服务程序不要用 VB 来做,特别是想运用到 Internet 上比较多用户的情况,更加不要考虑用 VB 来做,因为会非常不稳定。就不说 Internet,我曾经用过 VB 的控件数组技术编写过 http、ftp、http 代理的服务程序,结果没有一个是可以稳定的,即使是本机上调试。比如 http 代理,页面内容少可以使用,但是当页面元素比较多的时候,vb 根本就处理不过来,经常会丢失连接请……

谢谢,我是个新手,就会个VB,想做个工作上用的程序。
我想不行就在客户端将要上送的数据存成文件,VB能通过局域网共享的方式发送文件吗?(如果可以这样是否稳定些。我这个程序是在企业内网里用的。)灰常感谢! --------------------编程问答-------------------- 知道哪有问题了,客户端有这一句
myclient.close
修改建议:1.用UDP协议,可以减少服务器上的控件数量;也不需要手工关闭连接;2.仍然用现在这种结构,在服务端收完数据后,由服务端关闭连接,或者服务端向客户端发送一个定义好的字符串,比如“OVER”,客户端收到后,表示服务器已经接收完数据了,这时再由客户端关闭连接。
推荐是由服务端关闭连接。 --------------------编程问答--------------------
引用 5 楼 keven_csk 的回复:
谢谢,我是个新手,就会个VB,想做个工作上用的程序。
我想不行就在客户端将要上送的数据存成文件,VB能通过局域网共享的方式发送文件吗?(如果可以这样是否稳定些。我这个程序是在企业内网里用的。)灰常感谢!

其实用VB有更好的结构可以实现网络通讯这部分,比如用现成的网络服务软件与 VB 配合使用,如 Apache+PHP 或 IIS+ASP或ASP.NET,这样就可以避免自己写服务程序去考虑稳定性问题,只需要写个脚本让Apache或iis去处理,提供客户端需要的数据,这样一来,服务器的稳定性或连接数、资源管理都交给了Apache或IIS去管理,而这类程序都是专业的服务程序,也会很好的保障你的服务器稳定性,在VB客户端里,可以直接用 XMLHTTP 对象实现与服务器的数据上传或下载,这样一来,客户端的稳定性也交由了微软组件负责。这就和 WEB 开发里的 Ajax 技术是一样的,只是把 javascript 换成了 basic 而已,这种架构要比自己用 VB 完全自己写服务和客户端通讯部分稳定和高效很多。 --------------------编程问答--------------------       myServer(intMax).LocalPort = "8888"
      myServer(intMax).Close

这两句删除,必须的.
补充:VB ,  网络编程
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,