Клиенты VB6 WinSock Tcp устаревшего продукта просто «пропускают» половину отправленного им сообщения.
Я собираюсь работать над проектом сервера, где для подключения к серверу C # TCP потребуется старое унаследованное приложение, написанное на VB6.
Программирование TCP / клиент-сервер всегда было простым, когда обе конечные точки являются .NET благодаря System.Net.TcpClient. Однако, похоже, что группа VB6 застрянет с управлением WinSock VB6 (это так плохо, как я слышал?).
Есть ли какие-либо предостережения или подсказки, ведущие к этому, чтобы можно было позаботиться о любых минных минах или препятствиях, которые можно было бы избежать?
В текущей реализации есть сервер (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;
}
}
Где clientStream - это NetworkStream, связанный с TcpClient, который был создан из TcpListener.
Клиент получает сообщения следующим образом (стиль 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
РЕДАКТИРОВАТЬ: Когда я хочу отладить клиенты Tcp в C #, я использую NetworkStream TcpListener и делаю. Получать синхронно. Ясно, что это перегружает процессор, но он позволяет мне получать каждый байт, идущий по линии, вместо того, чтобы просто полагаться на то, что произойдет событие асинхронного сокета. Будет ли хорошим началом для начала переключение кода VB6 на синхронное выполнение и устранение слепого доверия к запуску события?