System.Net.Sockets发送vs stdcall:send

时间:2016-03-17 14:30:41

标签: c# c++ sockets char byte

我正在编写两个程序,一个在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);

1 个答案:

答案 0 :(得分:2)

对于C#代码,您的套接字类型为SocketType.Raw,但您似乎无法正确创建TCP数据包。你最终发送的是垃圾,你的设备或任何期望正确的TCP数据包的人都无法理解。