♣
局域网多个客户机并发向同一服务器传送小于1K字符串,以下方法能保证可靠吗?
我是设置一个服务器,计算机名固定,相关代码如下:
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能否完成数据传送。
· 网友精彩回答:
up
要保证不丢包还是用tcp/ip连接,用winsock数组建立连接,保证每个客户端都可靠连接上,嘿嘿,这就要考验你的服务器了
同意楼上的
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
我的意见是,保证100%,就得在服务器端有个对传过来的数据进行比较的过程。
80个100个不算多,只你的保存程序不要写太臭,耽误很多时间就容易出问题。
其实百十个可以用tcp,更容易处理,如果确实需要保证可靠性的话。
对于密集度高的接收,一般接收程序不要写盘,而交给其他进程来存盘,呵呵,比如每秒钟几百个到达。特别是写数据库,更不能一次一个的写入。
tcp连接不会掉包的
关键在于分包处理
要保证不丢包还是用tcp/ip连接, 对于在不同的网段用此连接更方便对于你的
八 九个客户端 tcp 足也应付得过来,用winsock 数组
900126(息夫人) 的意见也很不错.
socks只能满足在网络正常的状态下不丢包 如果网络断开或者过度拥塞 还是会丢包的 数据纠错应该是可以的 丢包最好加crc位进行校验
当然绝对安全的协议是没有的 只能期望尽量不丢包了
你只对丢包做了监视 而没有做丢包后的数据发送动作
.- 更多问题:
- · Smart Client 自动更新讨论
- · 浮点数问题,这是VC6.0的BUG吗?
- · 在线等一个 关于声明变量的小问题 ---------------
- · 请教关于WebBrowser、MemoryStream问题
- · 昨天吃坏东西了,肠胃炎发作,躺了一天,终于用内功把毒镇住了.散分!
- · 如何删除一个类?
- · 截图问题
- · 如何调用外部程序,并把外部程序的界面放到我的界面上
- · 如何在.net中做图表?
- · 我的shell脚本怎么能运行java程序
- · ****** 数据源改动后,重新部署EJB时的问题 ******
- · JAVA中如何得到系统的日期和时间?
- · 登录控制问题
- · 大家帮我提一点建议
- · 我以前看过一段代码,是通过显示SELECT语名和别的什么语句把一个数据库的值传入另一张表中
- · [高难度]如何捕获IE浏览器的事件,如在IE里单击下载。

