調試代碼一步當我在socket編程新手預期。我有一個用C#編寫的小應用程序,它使用COM端口連接到「密鑰映射器」設備,該設備僅在應用程序發送匹配命令時纔會響應。例如:如果我需要從映射器獲取一些PIN碼,我發送了一個十六進制命令。然後我收到正確的回覆。現在我正在嘗試使用套接字連接和設備的唯一IP地址執行相同的活動,如下所示。Socket.Receive()的作品,因爲只有一步
private void button1_Click(object sender, EventArgs e)
{
byte[] sendCommand = new byte[] { 0x02, 0x24, 0x31, 0x95, 0x0A, 0x0D, 0x03 };
byte[] ReceivedVal = new byte[1024];
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.178.170"), 10001);
Socket senderNew = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
waitLoop(5);
try
{
senderNew.Connect(ipEndPoint);
}
catch(SocketException socProblem)
{
Console.WriteLine(socProblem.Message.ToString());
}
waitLoop(5);
int test = senderNew.Receive(ReceivedVal);
Console.Write("Starting bytes read : ");
Console.WriteLine(test.ToString());
waitLoop(5);
int bytesSent = senderNew.Send(sendCommand);
waitLoop(5);
Console.WriteLine("Socket connected to {0}", senderNew.RemoteEndPoint.ToString());
int bytesRec = senderNew.Receive(ReceivedVal);
Console.Write("data bytes read : ");
Console.WriteLine(bytesRec.ToString());
waitLoop(5);
QueryAllCodeResponseHandler(ReceivedVal);
waitLoop(5);
Console.Write("Number of Pin Codes read: ");
Console.WriteLine(PinCodes.Length.ToString());
senderNew.Close();
GC.Collect();
PinCodes = null;
ReceivedVal = null;
ipEndPoint = null;
GC.Collect();
}
預期結果如下:
當我調試它一行行,它的工作原理完全沒問題。但是如果我直接運行它而沒有任何調試點或者跳過逐行調試,我只能得到2個引腳或0個引腳。然後,我試圖在嘗試失敗後使用第三方應用程序寫入,並意識到它從前一次嘗試中收到其餘引腳。有人能幫我發現問題在哪裏嗎?
你爲什麼這樣做:'的byte [] ReceivedVal =新的字節[1024]'? ''byte [] ReceivedVal = new byte [12];''''''''''''''''''''''''''''''''''' (https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121(v=vs.85).aspx)函數,它將等待緩衝區(在您的情況下爲「1024字節」)被填充。 –
因爲我收到十進制的結果。根據協議,我不會收到只有引腳,但我需要在解碼過程中刪除一些其他分隔符。這不是我可以使用該設備的唯一命令。 – Isuru
您顯示的代碼中有一堆'Console.WriteLine'。然後顯示您所說的預期輸出是正確的,但它不包含任何代碼寫入控制檯的字符串。在代碼中,你*顯示的輸出是在哪裏產生的,這完全不清楚。沒有其他人可以告訴你沒有顯示的代碼中發生了什麼。閱讀[問] –