System.Net.Sockets 发送与 stdcall:send
System.Net.Sockets send vs stdcall:send
我正在编写两个程序,一个用 C# 编写,一个用 C++ 编写,以通过套接字连接发送数据。
两个程序 运行,return 的预期值相同 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);
对于 C# 代码,您的套接字类型是 SocketType.Raw
,但您似乎没有正确创建 TCP 数据包。您最终发送的是垃圾,您的设备或任何期望正确 TCP 数据包的人都无法理解。
我正在编写两个程序,一个用 C# 编写,一个用 C++ 编写,以通过套接字连接发送数据。
两个程序 运行,return 的预期值相同 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);
对于 C# 代码,您的套接字类型是 SocketType.Raw
,但您似乎没有正确创建 TCP 数据包。您最终发送的是垃圾,您的设备或任何期望正确 TCP 数据包的人都无法理解。