2010-10-27 71 views
0

我在C#下面的代碼:Socket編程 - 發送/接收十六進制和字符串

Console.WriteLine("Connecting to server..."); 
TcpClient client = new TcpClient("127.0.0.1", 25565); 
client.Client.Send(BitConverter.GetBytes(0x02)); 
client.Client.Send(BitConverter.GetBytes(0x0005)); 
client.Client.Send(Encoding.UTF8.GetBytes("wedtm")); 
Console.Write("{0:x2}", client.GetStream().ReadByte()); 

對於我的生活,我無法弄清楚如何轉這個紅寶石。這裏有幫助嗎?

這是我到目前爲止,但預計它不工作:

require 'socket' 
s = TCPSocket.open("127.0.0.1", 25565) 
s.write(0x02) 
s.write(0x0005) 
s.write("wedtm".bytes) 
response = s.recvfrom(2) 
puts "Response Size #{response.size}: #{response.to_s}" 

的反應應該是0×02

編輯:

我假設我必須使用字符串#unpack然而,我不知道如何讓「wedtm」輸出到適當的\x000\x000\x000\x000格式。

+0

沒什麼,它是空白的。 – WedTM 2010-10-27 05:31:40

回答

0

這裏要考慮至少兩件事情:

  1. 網絡字節順序是大端。這意味着你應該總是以單個字節或字節數組思考,因爲字節在更大的類型時不會被混洗。
  2. 丙的#BitConverter.GetBytes(INT16)返回2 bytes in little-endian format和GetBytes會(Int32)返回4 bytes in little-endian format

不知道任何Ruby或它的字符串格式,我猜你需要爲第一部分做這樣的事情:

s.write("\x02\x00".bytes) 
s.write("\x05\x00\x00\x00".bytes) 

第二部分應該沒問題。

WireShark是在調試網絡代碼和/或反向工程網絡協議時記錄C#應用程序的流量並與您的差異進行比較的寶貴工具。

相關問題