局域网多个客户机并发向同一服务器传送小于1K字符串,以下方法能保证可靠吗?

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

我是设置一个服务器,计算机名固定,相关代码如下:  
   
  private   sub   form_load()  
  winsock1.bind   1000   梆定到本地计算机端口号  
  end   sub  
   
  private   sub   winsock1_dataarrival(byval   bytestotal   as   long)接收数据  
  dim   p   as   string  
  winsock1.getdata   p  
  这里将收到的p保存为本地一个文件  
  end   sub  
   
  客户端数量有80个或更多,各机相关代码完全相同,相关代码如下:  
   
  private   sub   form_load()  
  winsock1.remotehost   =   "home"   服务器名  
  winsock1.remoteport   =   1000  
  end   sub  
   
  客户端发送信息字串时使用——每个客户机在全部过程中只发送一次就完成了  
  winsock1.senddata   p  
   
  _____________________  
   
  问题一:  
   
  那么,如果这80个客户端(或更多)同时并发向服务器发送1k的字符串,我可是要求绝对可靠被服务器收到的,问题是是否会在上面服务器代码处理或客户发送时出现丢失包现象,请高手谈谈看法,可靠性到底能达到多少;出现丢包是上述代码设计有问题还是网络本身的问题?分析越细越好,如果可靠性不是100%有否改进的方案(只能用udp)?  
   
  问题二:  
   
  如果服务器ip为192.168.0.1,一部分客户端ip为192.168.0.*,而另一批客户端ip与之并不在一个网段内,udp能否完成数据传送。

· 网友精彩回答:

发表者:sparkwong

up

发表者:greentest

要保证不丢包还是用tcp/ip连接,用winsock数组建立连接,保证每个客户端都可靠连接上,嘿嘿,这就要考验你的服务器了

发表者:xayzmb

同意楼上的

发表者:of123

 
  private   intmax   as   long  
   
  private   sub   form_load()  
        intmax   =   0  
        sckserver(0).localport   =   1000  
        sckserver(0).listen  
  end   sub  
   
  private   sub   sckserver_connectionrequest   _  
  (index   as   integer,   byval   requestid   as   long)  
        if   index   =   0   then  
              intmax   =   intmax   +   1  
              load   sckserver(intmax)  
              sckserver(intmax).localport   =   1000   +   intmax  
              sckserver(intmax).accept   requestid  
        end   if  
  end   sub  
   
 

发表者:panxuejian

我的意见是,保证100%,就得在服务器端有个对传过来的数据进行比较的过程。

发表者:900126

80个100个不算多,只你的保存程序不要写太臭,耽误很多时间就容易出问题。  
  其实百十个可以用tcp,更容易处理,如果确实需要保证可靠性的话。  
  对于密集度高的接收,一般接收程序不要写盘,而交给其他进程来存盘,呵呵,比如每秒钟几百个到达。特别是写数据库,更不能一次一个的写入。

发表者:tanaya

tcp连接不会掉包的  
   
  关键在于分包处理  
   
 

发表者:qscandwh

要保证不丢包还是用tcp/ip连接,   对于在不同的网段用此连接更方便对于你的  
  八   九个客户端   tcp   足也应付得过来,用winsock   数组    
  900126(息夫人)   的意见也很不错.  
 

发表者:wosirius

socks只能满足在网络正常的状态下不丢包   如果网络断开或者过度拥塞   还是会丢包的     数据纠错应该是可以的   丢包最好加crc位进行校验  
  当然绝对安全的协议是没有的   只能期望尽量不丢包了

发表者:wosirius

你只对丢包做了监视     而没有做丢包后的数据发送动作

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved