传统产品的VB6 WinSock Tcp客户端只能“错过”发送给它们的一半消息。
我将参与一个服务器项目,其中需要连接到C# TCP服务器的旧的传统应用程序是用VB6编写的。
当两个端点都是.NET时,由于System.Net.TcpClient,TCP客户端/服务器编程始终很容易。但是看起来VB6组将被困在VB6 WinSock控件中(这是否像我听到的那样糟糕?)。
在此之前,有什么注意事项或提示,以便可以处理任何可避免的地雷或障碍?
当前实现的服务器(c#.net)以以下方式发送消息:
private bool SendToStream(NetworkStream clientStream, string message)
{
try
{
message = Crypto.Encrypt(message);
message = message + "\r\n";
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
if (clientStream != null)
{
StreamWriter blah = new StreamWriter("lastsent_a.txt");
blah.WriteLine("[some clientStream]" + Environment.NewLine + Environment.NewLine + message + Environment.NewLine + Environment.NewLine + Crypto.Decrypt(message));
blah.Close();
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
return true;
}
return false;
}
catch (Exception e)
{
ProcessDebugLog("ERROR - SendToStream: " + e.Message.ToString());
return false;
}
}
客户端使用与从TcpListener构建的TcpClient相关联的NetworkStream接收消息。
客户端以以下方式接收消息(VB6 WinSock风格):
Private Sub wskConnect_DataArrival(ByVal bytesTotal As Long)
Dim sBuff As String
wskConnect.GetData sBuff, vbString '-- Retrieve sent value
ProcessMessage sBuff '-- Process the value
End Sub
编辑:当我想在C#中调试Tcp客户端时,我使用TcpListener的NetworkStream,并同步执行.Receive。显然这会占用处理器,但它让我获取每个字节而不是只信任异步套接字事件将触发。将VB6代码切换为同步执行并消除对事件触发的盲目信任是否是一个好的起点?