如何通过socket将数据从c#客户端发送到java服务器?

时间:2010-01-15 07:26:20

标签: c# sockets

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

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

我猜这个问题来自endianess(little-endian,big-endian),我有几天时间研究,但无法解决这个问题。

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

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

out = new ObjectOutputStream(requestSocket.getOutputStream());

了out.flush();
public static final short CLIENT = 0;
out.writeShort(CLIENT);
了out.flush();

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

套接字套接字=新套接字(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
...
short 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服务器的输出错误是“获取套接字流时出现异常”

任何人都可以帮助我解决这个问题,提前谢谢

2 个答案:

答案 0 :(得分:1)

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

Network to Host order

Host to network order

希望这有帮助。

答案 1 :(得分:1)

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

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

解决此问题需要更多信息。