我正在编写两个程序,一个在c#中,另一个在c ++中,通过套接字连接发送数据。
两个程序都运行,都返回iResult
的预期值,但只有c ++程序控制我正在与之通信的设备。
当我在手表中查看调试模式中SendData
的值时,会有一些不同之处。例如:
SendData[0] = 143 // c# result
SendData[0] = -113 ' ' //c++ result
问题:byte[]
与char[]
之间存在差异,或者发送方法的实施方式有何不同?
C ++:
#pragma comment(lib, "Ws2_32.lib")
WSADATA wsaData;
SOCKET MainSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
char SendData[1024];
SendData[i] = 0x8f; i = i + 1;
SendData[i] = 0xa5; i = i + 1;
SendData[i] = 0x02; i = i + 1;
//... etc
SendData[i] = 0x60; i = i + 1;
iResult = send(MainSocket, buf, i, 0);
C#:
ipEnd = new IPEndPoint(ip, port);
MainSocket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IPv4);
MainSocket.Connect(ipEnd);
byte[] SendData = new byte[1024];
SendData[i] = 0x8f; i = i + 1;
SendData[i] = 0xa5; i = i + 1;
SendData[i] = 0x02; i = i + 1;
//... etc
SendData[i] = 0x60; i = i + 1;
int iResult = MainSocket.Send(SendData, i, SocketFlags.None);
答案 0 :(得分:2)
对于C#代码,您的套接字类型为SocketType.Raw
,但您似乎无法正确创建TCP数据包。你最终发送的是垃圾,你的设备或任何期望正确的TCP数据包的人都无法理解。