【问题标题】:How to send data from c# client to java server via socket?如何通过套接字将数据从 c# 客户端发送到 java 服务器?
【发布时间】:2011-01-05 10:01:49
【问题描述】:

我有一个由 java 编写的套接字服务器,它总是监听特定的端口。我用 Java 编写了一个客户端,它可以连接到服务器,但是当我用 C# 创建一个客户端时,我无法连接到服务器。

我只想发送一个短值来启动 java 服务器。

我猜问题来自字节序(小端,大端),我有几天的时间研究但无法解决这个问题。

我发布有关我的问题的更多信息

我使用 java.io.* 和 java.net.*。我的java代码

out = new ObjectOutputStream(requestSocket.getOutputStream());
out.flush();
公共静态最终短客户端= 0;
out.writeShort(CLIENT);
out.flush();

对于 c#,我使用 System.Net.Sockets。我的 C# 代码如下:

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
...
短 sClient = 0;
if (BitConverter.IsLittleEndian) sClient = IPAddress.HostToNetworkOrder(sClient);

NetworkStream ns = new NetworkStream(socket);
BinaryWriter bw = new BinaryWriter(ns);
bw.Write(sClient);

java代码可以连接到java服务器但是c#代码不能:(。java服务器的输出错误是“Exception while getting socket streams”

任何人都可以帮助我解决这个问题,在此先感谢

【问题讨论】:

  • 要排除字节顺序,只需打印出您收到的短片和您打印的短片。例如,如果您发送的短消息是 0x1234,而您收到的短消息是 0x3412,那么万岁,这是一个字节序问题。如果你什么也没收到或收到完全不同的东西,那就是另外一回事了。调试无非就是一步步排除问题,直到发现问题

标签: c# sockets


【解决方案1】:

如果字节序是您的问题,您应该查看以下两个链接,它们向您展示如何在主机和网络字节顺序之间进行转换

Network to Host order

Host to network order

希望这会有所帮助。

【讨论】:

  • 我已经尝试过主机到网络但无法解决这个问题。在 Java 中,我的代码是这样的:out.writeShort(CLIENT); (out 是 ObjectOutputStream,CLIENT 很短)和我在 C# 中的代码:short sClient = 0; if (BitConverter.IsLittleEndian) sClient = IPAddress.HostToNetworkOrder(sClient);使用java代码,java服务器将返回一个数据包,但使用c#代码,java服务器总是返回“获取套接字流时出现异常”希望有人能帮助我,提前谢谢。
【解决方案2】:

服务器就是服务器,因此您需要更加具体。他们没有正确沟通的原因可能有一百万个。你能ping通服务所在的机器吗?它们是在同一台机器上运行还是可能存在防火墙问题?您是否正在调试每个以查看请求是否超时或被主动拒绝?他们是否连接但编码错误?

另外,您使用的是什么协议?如果您以自定义协议格式发送二进制数据,可能会担心字节顺序,但大多数协议都需要网络字节顺序。如果存在字节顺序问题,则需要在调试器中进行验证。您在 Java 和 .NET 中使用什么类?你能发布一些示例代码吗?

需要更多信息来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 2013-12-26
    • 1970-01-01
    • 2012-12-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    相关资源
    最近更新 更多