gpt4 book ai didi

java - Java 和 C# 应用程序之间的套接字通信

转载 作者:行者123 更新时间:2023-11-30 03:30:05 26 4
gpt4 key购买 nike

我有 02 个应用程序,一个是用 java 编写的,另一个是用 C# 编写的。我需要在它们之间交换数据(字符串),因此我使用套接字连接。


目前,C# 应用程序充当服务器,而 Java 应用程序充当客户端。 C# 应用程序将持续监听端口“7777”,Java 应用程序将在启动时向“localhost:7777”创建一个套接字,并使用该套接字将数据发送到 C# 服务器。我不会关闭它们之间的连接,因为我需要经常交换数据。


一切都很好,直到我的 C# 服务器应用程序有时需要向 Java 客户端应用程序发送一些字符串。我考虑使用另一个端口让我的java应用程序成为服务器,而C#应用程序也将成为客户端。但我不认为这是一个好的解决方案。


P/S:是的,套接字是双向的,在我当前的应用程序中,我可以将字符串数据从 C# 应用程序发送回 Java 应用程序,但前提是 Java 应用程序首先将字符串发送到 C# 应用程序应用程序,现在正在等待来自 C# 应用程序的响应数据。


所以我想问一下还有没有更好的解决方案?如果我们总共只使用 1 个端口可以吗?非常感谢。

最佳答案

您的套接字可以双向工作(双向),因此您无需创建另一个套接字。您只需获取连接两侧的套接字的输出流和输入流,并将它们用于发送/接收。

要发送字符串,最简单的方法可能是使用 DataOutputStream,因为您可以使用简单的函数编写 UTF-8 字符串。

Java 端:

String blah = "hey";
DataOutputStream dataOs = new DataOutputStream(socket.getOutputStream());
dataOs.writeUTF(blah);

C# 方面稍微棘手一些,因为您需要考虑这样一个事实:从 java 函数 writeUTF() 发送的前两个字节实际上是后面字符串的长度(以字节为单位)。您可以先获取这 2 个字节,然后将它们放入 int 中,同时移动这些位。然后,当您从套接字请求字符串时,可以使用该 int 作为缓冲区的大小。应该看起来像这样。

C# 方面:

int length = 0;
byte[] sizeBuffer = new byte[2];
socket.Receive(sizeBuffer);
for (int i = 0; i < sizeBuffer.Length; i += 1)
{
length = length << 8;
length += sizeBuffer[i];
}

byte[] stringBuffer = new byte[length];
socket.Receive(stringBuffer);

string myString = Encoding.UTF8.GetString(stringBuffer, 0, stringBuffer.Length);

关于java - Java 和 C# 应用程序之间的套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com