c# - System.Net.Sockets 发送与 stdcall :send

标签 c# c++ sockets char byte

我正在编写两个程序,一个用 C# 编写,一个用 C++ 编写,以通过套接字连接发送数据。

两个程序都运行,都返回相同的 iResult 预期值,但只有 c++ 程序控制我正在与之通信的设备。

当我在 watch 的 Debug模式下查看 SendData 的值时,有一些差异。例如:

SendData[0] = 143 // c# result
SendData[0] = -113 ' ' //c++ result

问题:这是 byte[]char[] 的区别,还是 send 方法实现方式的区别?

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# - System.Net.Sockets 发送与 stdcall :send,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063515/

相关文章:

java - 蓝牙打印在不同设备上从 Socket 抛出 IOException

c - recv C 代码套接字中的奇怪数据

python - 有没有办法不缓冲来自 UDP 套接字的数据

c# - Windows 10 开发 : How do I debug the Windows Runtime Component (written in C#) which is consumed by Javascript code

c# - 如何在 C# 中使用 InstaSharp 关注用户

c++ - OpenCv Unspecified error(节点不代表用户对象(未知类型?))

c++ - 发送具有 std::vector 成员的结构时出现段错误

c# - onclick 事件不调用函数?

c# - 写入包含 ""的字符串

c++ - 递归删除注册表项