我目前正在 vb.net 2010 中创建一个多客户端服务器应用程序。我正在使用套接字和网络流来读取数据。
很难解释正在发生的事情,并且发布代码可能对我的项目规模没有太大帮助。但是,我将简要介绍一下我正在做什么,然后会发生什么,希望有人可以帮助我,或者给我一些关于可能发生的事情的想法:)。
我启动服务器和客户端,它们都异步连接和监听。在我的客户端中,我输入登录信息并使用网络流将其发送到服务器。服务器读取一切正常,再次开始侦听,处理数据,向客户端发送帐户信息,表示客户端已连接,然后在处理完数据后随机关闭并退出该功能。发生这种情况时,客户端正在接收数据,再次开始监听,处理数据,说套接字已连接,然后一旦一切完成,函数完成后随机关闭。
现在我已经确保其他代码不会影响套接字,并将所有不需要的内容注释掉,并允许每个服务器和客户端继续循环。(创建一个游戏,所以有一个服务器循环和游戏循环)它似乎完成了所有的工作,然后退出了阅读子,只是停止听更多的阅读。
如果有人有任何想法,将不胜感激。提前致谢!
每一边的代码都是一样的:
接收数据:
Private Sub ReceiveOneByte(ByVal ar As IAsyncResult)
Dim netStream As NetworkStream
Dim InData() As Byte
Dim DataLen(3) As Byte
Dim inLength As Integer
Dim Buffer As New clsBuffer
Dim MsgType As Integer
Dim NewData() As Byte
Dim Empty() As Byte
SyncLock Client_TCP.Client
Try
netStream = New NetworkStream(Client_TCP.Client)
Catch ex As Exception
End Try
' gets length of data comming in
Try
netStream.Read(DataLen, 0, 4)
Catch ex As Exception
End Try
inLength = BitConverter.ToInt32(DataLen, 0)
' gets data comming in
ReDim InData(inLength)
netStream.Read(InData, 0, inLength)
netStream.Flush()
End SyncLock
Buffer.WriteBytes(InData)
MsgType = Buffer.ReadLong
If InData.Length > (InData.Length - 4) Then
ReDim NewData(InData.Length - 5)
Array.ConstrainedCopy(InData, 4, NewData, 0, NewData.Length - 1)
HandleDataSub(MsgType)(0, NewData)
Else
HandleDataSub(MsgType)(0, Empty)
End If
Client_TCP.GetStream.BeginRead(Readbyte, 0, 1, New AsyncCallback(AddressOf ReceiveOneByte), Nothing)
End Sub
发送数据:
Public Sub Send(ByVal Data() As Byte)
Dim netStream As NetworkStream
Dim len As Integer = Data.Length
Dim DataLen() As Byte = BitConverter.GetBytes(len)
Dim bit(0) As Byte
bit(0) = 1
SyncLock Client_TCP.Client
netStream = New NetworkStream(Client_TCP.Client)
netStream.Write(bit, 0, 1)
netStream.Write(DataLen, 0, 4)
netStream.Write(Data, 0, Data.Length)
'netStream.Flush()
End SyncLock
End Sub