我在C#中创建了一个客户端,我想在Linux下用C语言构建服务器。
我为每条“消息”使用带有“message”长度的前缀。
我使用byte[]
(4字节数组)将其编码为BitConverter.GetBytes()
数组。
之后我通过
socket.Send(prefix, prefix.Length, 0);
Linux上的C服务器无法读取该数字。它显示一个奇怪的字符,尽管它读取4个字节。
Linux端看起来像
char prefix[4];
int bytes = 0;
bytes = recv(s, prefix, 4, 0);
printf("%s", prefix);
如果我使用Encoding.UTF8.GetBytes()
对数字进行编码,Linux会正确理解它。
我对它进行了测试,看起来只有当程序用这两种不同语言编码时才会出现问题。
发生了什么事?
答案 0 :(得分:1)
BitConverter.GetBytes()
会给你一个二进制表示 - 在大多数情况下不是可打印的字符(尝试int 0x20202020,这应该给你一个或多个空格) ,但非常适合加工purpouses。您可以使用printf("%d",the_int_variable)
Encoding.UTF8.GetBytes()
会为您提供字符串表示形式 - 这对于将其打印到控制台很有用,但对于处理来说是次优的。
修改强>
更新完问题后,在将前缀更改为int并重试后,将printf("%s", prefix);
更改为printf("%d", prefix);
。