大讨论:关于VB Winsock。

gjjofefs 2009-04-22 11:33:06
加精
近来用到了winsock,有些地方钻研不够深入,所以想与各位讨论一下。
在VB中,服务器的winsock瞬间的连接量大概在三四十左右。也就是说,同一秒内,有三四十个客户端连接到服务器,因为使用的是tcp,所以就使用了winsock的控件数组,有多少个连接就建立多少个winsock。请问,如果这个瞬间的连接量再大很多的话,服务器能不能承受?比如说1000或者更多。
当然,这个瞬间的连接量只是服务器程序刚刚启动时才有的,因为客户端是有限的,所以就现在的情况来看,最大的连接数是100.
因为以后要增加客户端,所以在服务器程序打开的时候,客户端就会一起对服务器进行连接,这个连接时很快的,在服务器开始的一两秒内,就会有1000甚至更多的Tcp进行连接,服务能不能承受?
...全文
1535 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
suyiping2012 2012-09-05
  • 打赏
  • 举报
回复
冒个泡
fac123123 2012-07-28
  • 打赏
  • 举报
回复
呵呵。~看完要回帖
hkchoose 2010-01-19
  • 打赏
  • 举报
回复
增加自身美德
煤油灯 2009-09-19
  • 打赏
  • 举报
回复
路过:(
jessezappy 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 vb6andvc6 的回复:]
各位啊,草民有一个问题:
用vb6winsock做通讯,服务端用winsock数组对应各个客户端。
那么这些数组它们是各自有一个端口号呢还是共用一个端口号?
曾试过这两种情况,均不能实现群通讯?不知为什么?


[/Quote]

使用TCP协议,客户端和服务端都使用同一个端口,服务端使用一个sock进行侦听 sock.Listen 方法 ,使用另一个控件数组响应请求,在sock__ConnectionRequest(ByVal requestID As Long) 事件中,使用Sock1(SockIndex).Accept (requestID) 方法接受客户端连接请求。这时 Accept 方法会自动分配端口给客户端用,而你不用考虑这个自动分配的端口号,这个是由winsock控件自动管理的,你只需要保证客户端设置的通讯端口和服务端的侦听端口相同即可。
苏门答腊 2009-09-17
  • 打赏
  • 举报
回复
以我的经验,没问题。
lhslktg 2009-09-10
  • 打赏
  • 举报
回复
hao
lhslktg 2009-09-09
  • 打赏
  • 举报
回复
1
shuihan20e 2009-09-08
  • 打赏
  • 举报
回复
mark
Tomzzu 2009-09-08
  • 打赏
  • 举报
回复
数量超过1000还是用 完成端口(IOCP)方式
无论使用哪种方式, 都要使用连接池
初始化时系统就准备好一系列的连接Socket, 或放在数组中, 有客户连接从再有的未数组中找出没有空闲的做对映
内心的声音 2009-09-08
  • 打赏
  • 举报
回复
就那样呗!!
yc513485587 2009-09-08
  • 打赏
  • 举报
回复
三分士大夫士大夫士大夫速度
yc513485587 2009-09-08
  • 打赏
  • 举报
回复
舒服撒房贷首付撒分
yc513485587 2009-09-08
  • 打赏
  • 举报
回复
气死铃铛多少师范师范的斯蒂芬
CNCPT01 2009-09-08
  • 打赏
  • 举报
回复
就算是所谓多线程和并发,在单一时间片 服务器(单CPU)还是只能处理一个请求. 这些,我们无法去考虑改进.除非为拥有多核资源,去采用多线程.
wxsan 2009-09-08
  • 打赏
  • 举报
回复
关注
CNCPT01 2009-09-08
  • 打赏
  • 举报
回复
在服务器开始的一两秒内,就会有1000甚至更多的Tcp进行连接,服务能不能承受?
个人认为 只要不耗尽系统资源.服务器是能承受的,只是响应速度会变慢而已.在你的 服务端未处理完响应之前,所有后来的响应都是被阻塞的吧.
CNCPT01 2009-09-08
  • 打赏
  • 举报
回复
http://d.download.csdn.net/down/176593/CNCPT01

以前用 VB 时候写的 四国军棋.未完善,但是里面用到了 WINSOCK ,里面的客户端连接处理机制还是可以供参考的~


Private Sub Sock_TCP_Close(index As Integer)
'将关闭的连接对应的用户 状态清0 除非已经在线。
Dim elem As stackelem
If index = 0 Then
MsgBox "a"
Else
Unload Sock_TCP(index)
elem.index = index
push elem
End If
With Sock(elem.index)
.index = elem.index
.RequestID = 0
.Connect_IP = ""
End With

End Sub

Private Sub Sock_TCP_ConnectionRequest(index As Integer, ByVal RequestID As Long)

Dim tmp_index As Integer
Dim elem As stackelem

If StackEmpty <> True Then
pop elem
End If
'MsgBox Sock_TCP(0).State
Load Sock_TCP(elem.index)

PRINTMSG "Connection Request!"


If Sock_TCP(elem.index).State <> sckClosed Then
Sock_TCP(elem.index).Close
End If

Sock_TCP(elem.index).Accept RequestID
PRINTMSG "Current Connection Accepted By Sock:" & CStr(elem.index) & "!"

With Sock(elem.index) '11/5 突然觉得这个结构现在没用,,,,
.index = elem.index
.RequestID = RequestID
.Connect_IP = Sock_TCP(elem.index).RemoteHostIP
End With

CountNum = CountNum + 1
PRINTMSG "Current Connection Comes From:" & Sock_TCP(elem.index).RemoteHostIP '为了简单起见放在这 严格上说 这样描述并步正确!
PRINTMSG "Current Connections:" & CStr(CountNum)

End Sub


Attribute VB_Name = "SockStruct"
Public Type Sockets
Index As Integer
RequestID As Long
Connect_IP As String
End Type

Public Type stackelem
Index As Integer
End Type

Public Sock(399) As Sockets
Public stack(399) As stackelem

Public s_top As Integer
Public s_base As Integer
Public Number As Integer
Public stack_empty As stackelem


Public Function StackEmpty() As Boolean
If Number = 0 Then
StackEmpty = True
Else
StackEmpty = False
End If
End Function

Public Function init_stack()
Number = 400
s_top = 400
s_base = 0
For i = 0 To 399
stack(i).Index = i
Next
End Function

Public Function push(elem As stackelem)
'由于只限制400 连接 不会出现三益出
stack(Number) = elem
Number = Number + 1
s_top = Number

End Function

Public Function pop(elem As stackelem)

elem = stack(s_top - 1)
Number = Number - 1
s_top = Number

End Function


cooltianshi 2009-09-08
  • 打赏
  • 举报
回复
学习了
shiweifu 2009-09-08
  • 打赏
  • 举报
回复
做SOCKET方面的开发还是用C来做吧
IOCP效率很高

如果想简单点,PYTHON的twisted库貌似也是个不错的选择
加载更多回复(42)

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧