gpt4 book ai didi

.Net TCP 客户端通信问题

转载 作者:可可西里 更新时间:2023-11-01 02:55:03 26 4
gpt4 key购买 nike

我是网络编程的新手,正试图在 ICE API 测试服务器和我的应用程序之间建立通信。当我尝试登录到服务器时,下面的代码只工作一次。换句话说,当我发送登录消息时,服务器会成功登录回复我。一旦我得到这个,我将下一条消息发送到服务器,但作为回复我得到 0,这意味着服务器已经断开连接。有人可以看一下我的客户逻辑并指出发生上述情况的正确方向吗?请帮我解决这个问题,因为我已经浪费了几天没有结果。谢谢你。

Public Function connect() As Boolean
bConnected = True
Dim port As Int32 = Convert.ToInt32("80")
Dim server As String = "63.247.113.201"
Try
objClient = New System.Net.Sockets.TcpClient(server, port)
objClient.NoDelay = False
objClient.Client.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, 1)
objClient.GetStream.BeginRead(byReadBuffer, 0, BYTES_TO_READ, New AsyncCallback(AddressOf doRead), Nothing)
Catch ex As Exception
RaiseEvent exErr(ex.ToString)
bConnected = False
End Try

Return bConnected
End Function

Public Function DoTCPRequest(ByVal data As String, ByVal resetSession As Boolean) As String
Dim objSw As IO.StreamWriter

Try
objSw = New IO.StreamWriter(objClient.GetStream)
objSw.Write(data & vbCrLf)
objSw.Flush()
Console.WriteLine("Sent:" + data)
Catch ex As Exception
RaiseEvent exErr(ex.ToString)
End Try

objClient.GetStream.BeginRead(byReadBuffer, 0, BYTES_TO_READ, AddressOf Me.doRead, Nothing)
Return System.Text.Encoding.UTF8.GetString(byReadBuffer, 0, BYTES_TO_READ)
End Function

Private Sub doRead(ByVal ar As System.IAsyncResult)
Dim nTotalRead As Integer
Try
Try
nTotalRead = objClient.GetStream.EndRead(ar) Catch ex As Exception
RaiseEvent exErr(ex.ToString)
End Try

If nTotalRead > 0 Then
Dim szReceivedString As String = System.Text.Encoding.UTF8.GetString(byReadBuffer, 0, nTotalRead)
RaiseEvent dataReceived(szReceivedString)
Console.WriteLine("Recv1:" + szReceivedString)
End If

objClient.GetStream.BeginRead(byReadBuffer, 0, BYTES_TO_READ, New AsyncCallback(AddressOf doRead), Nothing)

Catch ex As Exception
RaiseEvent exErr(ex.ToString)
End Try

End Sub

最佳答案

@lberezka,我在代码中看到了一件奇怪的事情。您想查看 DoRead() 方法中的以下代码行吗?

objClient.GetStream.BeginRead(byReadBuffer, 0, BYTES_TO_READ, New AsyncCallback(AddressOf doRead), Nothing) 'Begin the reading again.

理想情况下,在任何异步调用(Begin 类)中,回调句柄应收到答案并尝试使用 End 方法结束调用。在你的情况下 Stream.EndRead。

我在您的代码中看到的是,您一次又一次地递归调用 begin 方法,但我在任何地方都看不到 EndRead。

它给你任何线索吗?

关于.Net TCP 客户端通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6192223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com