gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:50:56 24 4
gpt4 key购买 nike

我有两个应用程序,一个用 Java 编写,另一个用 C# 编写。我正在尝试将字符串从 Java 应用程序发送到 C# 应用程序。

我发送字符串的java代码如下:

String response;
try {
DataOutputStream outToServer =
new DataOutputStream(outGoingSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new InputStreamReader(outGoingSocket.getInputStream()));

outToServer.writeBytes(message + '\n');
outToServer.flush();

response = inFromServer.readLine();

System.out.println("Received: " + response);
} catch (Exception ex) {
System.err.println("Exception in incoming socket: " + ex.getMessage());
}

我用于接收数据的C#代码如下:

Byte[] bytes = new Byte[1000];
String data = null;
try {
Console.Write("Waiting for a connection... ");
TcpClient client = incomingSocket.AcceptTcpClient();
Console.WriteLine("Connected!");

data = null;
NetworkStream stream = client.GetStream();

int i;
while (true) {
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) {
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("Received:", data);
processReceivedMessage(data);
ackSocket(stream, "OK");
}
}
} catch (Exception ex) {
Console.WriteLine("Exception: ", ex);
}

我在 C# 应用程序中接收数据时遇到问题。当我在 Java 应用程序中发送字符串“Data”,并尝试使用 Console.WriteLine("Received: {0}", data) 打印 C# 应用程序接收到的数据时,输出为:

Received: D
Received: ata

如果我使用Console.WriteLine("Received: ", data),输出为:

Received: 
Received:

我希望我的 C# 应用程序能够接收 Java 应用程序发送的完整字符串。我尝试将缓冲区字节数组大小增加到 1000,但没有帮助。我没有使用套接字的经验,有人可以告诉我我做错了什么吗?

最佳答案

因此,正如您所看到的,接收端以可能比总消息小得多的 block 形式接收响应。

您不应该寻求改变这种行为...这是网络编程的事实。你的工作就是将它们重新粘在一起。

"I want my c# application receive the full string"

那么,您的接收应用程序如何知道它已收到完整的字符串?您是否发送了一个长度字段来指示有多少数据即将到来?也许您希望\n 表示消息结束?零字节?

如果您的终止符确实是换行符,您可能需要考虑将 NetworkStream 传递到 StreamReader 并调用 ReadLine在上面。现在,StreamReader 将继续从流中读取数据,直到遇到换行符,然后将该行交给您。

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

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