回复人: samwzhang(分全给我) ( ) 信誉:100 :胡说八道, 楼主的程序肯定有问题, 如果用winsock数组,记得变量也用数组为每个winsock分配一个,用tcp联接怎么还用时钟呢?! 它有个联接 state 嘛!, Private Sub wsListen_ConnectionRequest(Index As Integer, ByVal requestID As Long) Dim i As Integer Dim SetConnet As Boolean SetConnet = False ' 还没有把请求传给该winsock
If Index = 0 Then
If UBound(FreeIndex) = 0 Then '没有创建Winsock,初始状态 Load wsListen(1) '创建一个Winsock wsListen(1).LocalPort = 0 wsListen(1).Accept requestID ReDim FreeIndex(1) FreeIndex(1) = "Busy" Call ShowInfo(CStr(requestID), "Busy") GoTo TheLine End If
For i = 1 To UBound(FreeIndex) If FreeIndex(i) = "Free" Then '如果Winsock数组I空闲 wsListen(i).Accept requestID '则让它接收 FreeIndex(i) = "Busy" '设置成忙状态 SetConnet = True GoTo TheLine End If Next
If SetConnet = False Then '没有空闲的Winsock ReDim Preserve FreeIndex(UBound(FreeIndex) + 1) '注册 Load wsListen(UBound(FreeIndex)) '创建一个Winsock wsListen(UBound(FreeIndex)).LocalPort = 0 wsListen(UBound(FreeIndex)).Accept requestID FreeIndex(UBound(FreeIndex)) = "Busy" Call ShowInfo(CStr(requestID), "Busy") End If
TheLine: ReDim Preserve GotHeader(1 To UBound(FreeIndex)) ReDim Preserve FileNum(1 To UBound(FreeIndex)) ReDim Preserve Receivedbyt(1 To UBound(FreeIndex)) ReDim Preserve ByteSec(1 To UBound(FreeIndex)) End If
End Sub
也就是 多个winsock 之间不要有共享变量,如果有就会出错
你说行,那你给我单线程开个100个Socket看看还能不能正常通信,如果能,那是你的机器好,再开1000个试试。 如果你说VB也可以多线程,那也行,你试试开个100个线程,但是又要操作机器上的一些资源,看看你的程序会不会挂? 要是也能通过,那么I 服了 YOU
楼主的程序肯定有问题, 如果用winsock数组,记得变量也用数组为每个winsock分配一个,用tcp联接怎么还用时钟呢?!
它有个联接 state 嘛!, Private Sub wsListen_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Integer
Dim SetConnet As Boolean
SetConnet = False ' 还没有把请求传给该winsock
If Index = 0 Then
If UBound(FreeIndex) = 0 Then '没有创建Winsock,初始状态
Load wsListen(1) '创建一个Winsock
wsListen(1).LocalPort = 0
wsListen(1).Accept requestID
ReDim FreeIndex(1)
FreeIndex(1) = "Busy"
Call ShowInfo(CStr(requestID), "Busy")
GoTo TheLine
End If
For i = 1 To UBound(FreeIndex)
If FreeIndex(i) = "Free" Then '如果Winsock数组I空闲
wsListen(i).Accept requestID '则让它接收
FreeIndex(i) = "Busy" '设置成忙状态
SetConnet = True
GoTo TheLine
End If
Next
If SetConnet = False Then '没有空闲的Winsock
ReDim Preserve FreeIndex(UBound(FreeIndex) + 1) '注册
Load wsListen(UBound(FreeIndex)) '创建一个Winsock
wsListen(UBound(FreeIndex)).LocalPort = 0
wsListen(UBound(FreeIndex)).Accept requestID
FreeIndex(UBound(FreeIndex)) = "Busy"
Call ShowInfo(CStr(requestID), "Busy")
End If
TheLine: ReDim Preserve GotHeader(1 To UBound(FreeIndex))
ReDim Preserve FileNum(1 To UBound(FreeIndex))
ReDim Preserve Receivedbyt(1 To UBound(FreeIndex))
ReDim Preserve ByteSec(1 To UBound(FreeIndex))
End If
End Sub
如果你说VB也可以多线程,那也行,你试试开个100个线程,但是又要操作机器上的一些资源,看看你的程序会不会挂?
要是也能通过,那么I 服了 YOU
我是用VB做了个OCX控件
程序在win2000server下运行没有问题的,已经做了5年的报税;
现在在2003server下有自动断开的现象,应该是和系统有关
timer是在控件外的程序里的有调用 state的
回 qscandwh(思成)
变量也有分配index的