现在用vb做socket编程,考虑到多个客户端向服务器端发送数据,因为在客户端分过包,现在担心的是在服务器端如果同一时刻收到N个包,会不会造成换成区溢出,即使溢出。需不需要考虑这个问题。是不是只与内存有关,我们不需考虑缓存,很乱,请大家帮忙,不胜感激!!

解决方案 »

  1.   

    服务端做成Socket控件数组,自己处理自己的,用Index区分。
      

  2.   

    服务器端如果同一时刻收到N个包
    WINSOCK在TCP方面能很好的处理这个问题,UPD没试过,估计应该也一样.
    但关键是程序员是否为每个相应的对应的连接端口和IP是否有独立开一个处理过程..
    比如:TCP_接收数据 处理模块 
    '单用户机制:dim a as string
    '多用户机制:dim a() as string
    end 模块
    要考虑的是每个处理过程不用的用户数组概念的问题.
      

  3.   

    至于收发包的先后顺序问题,已经测试TCP_接收数据 处理模块 
    '传送信息1.'传送信息2.'传送信息3.
    end 模块在此过程,除非完全进入end 或exit 模块,否则WINSOCK将不发送信息...
    像这种情况,只传送一次信息就EXIT或END模块的话,WINSOCK是马上发回信息的.TCP_接收数据 处理模块 
    '传送信息1.
    end 模块
      

  4.   

    dim td() as byte
    '客户端定义一个数组变量.(不要在服务器端用这样的变量,服务器端用的话,要多用户的数组变量)接收模块
    td()=CStr(td())&CStr(新接收到的数据)'进入检测,比较是否达到一定的字节量.END 模块
      

  5.   

    考虑到WINSOCK END模块的问题.你可以把
    '进入检测,比较是否达到一定的字节量.
    的部份改成用TIMER来控制,即:
    接收模块
    td()=CStr(td())&CStr(新接收到的数据)'timer事件=trueEND 模块如果直接进入检测,在END模块之前,程序可能会未有任何响应,比较不继续接收下一段数据包什么的.
    但如果启用TIMER事件的话,它就会直接结束这个模块.
      

  6.   

    缓冲区问题已经解决,现在又多了一个效率问题,服务器端要处理那么多客户端发送的udp数据包,客户端每30秒发送一次,大概有好几十个客户端,我试了一下,感觉处理速度太慢,不知道各位有没有好的的处理机制,想采用多线程又不知从何下手?还望赐教!!
      

  7.   

    即使是采用多线程.还是会经过排队这个阶段的.
    而且,别指望用VB去实现你的多线程技术,常让你哭笑不得摸不着头.既然你用了VB去实现它.那你就忍受VB的不满吧.你说的慢,估计不太可能,每次传送的字节有多少K?
      

  8.   

    udp有 广播 机制  如果 都是相同 的数据可以采用广播  再说 udp是很容易 实现 p2p的 为什么 要那么 麻烦 1对多 那