Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Net.Sockets发送vs stdcall:send 我写了两个程序,一个是C语言,一个是C++程序,通过套接字连接发送数据。p> 两个程序都运行,都返回相同的期望值:代码> iRESult/Cuth>,但只有C++程序控制我正在与之通信的设备。< /P>_C#_C++_Sockets_Char_Byte - Fatal编程技术网

C# System.Net.Sockets发送vs stdcall:send 我写了两个程序,一个是C语言,一个是C++程序,通过套接字连接发送数据。p> 两个程序都运行,都返回相同的期望值:代码> iRESult/Cuth>,但只有C++程序控制我正在与之通信的设备。< /P>

C# System.Net.Sockets发送vs stdcall:send 我写了两个程序,一个是C语言,一个是C++程序,通过套接字连接发送数据。p> 两个程序都运行,都返回相同的期望值:代码> iRESult/Cuth>,但只有C++程序控制我正在与之通信的设备。< /P>,c#,c++,sockets,char,byte,C#,C++,Sockets,Char,Byte,当我在手表的调试模式下查看SendData的值时,有一些不同之处。例如: SendData[0] = 143 // c# result SendData[0] = -113 ' ' //c++ result 问题:这是byte[]与char[]之间的差异,还是send方法的实现方式不同? c++: c#: 您的套接字类型是C#code的SocketType.Raw,但您似乎没有正确创建TCP数据包。您最终发送的是垃圾,您的设备或任何期望正确TCP数据包的人都无法理解这些垃圾。该senddata

当我在手表的调试模式下查看
SendData
的值时,有一些不同之处。例如:

SendData[0] = 143 // c# result
SendData[0] = -113 ' ' //c++ result
问题:这是
byte[]
char[]
之间的差异,还是send方法的实现方式不同?

c++:

c#:


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

该senddata数组中内置了一个标头和校验和。C++实现不使用原始套接字吗?另外,为什么SDENDATA在两个之间不同?@亚历克斯,C++实现使用TCP套接字(<代码> SokkFixs)。它创建一个合适的TCP数据包,然后用用户数据填充它
SendData
并没有什么不同。但由于MSVC将
char
视为
signed char
,并且
0x8F
大于125,因此它将此显示为负数。最好使用
无符号字符
作为缓冲区。但是底层位表示仍然与C#中的相同,它是无符号的
字节
。好的,我将尝试使用sockettype.stream和协议tcp。谢谢,我以为您在发送自己的头和校验和时必须使用raw。@Alex,这取决于头和校验和。如果您正在执行自己的协议头(TCP/UDP/ICMP/etc),则需要原始模式。但是,如果您使用的是套接字接口已经支持的协议,并且您的头和校验和用于您要发送的内容(有效负载),那么您当然不需要原始套接字。
#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);
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);