gpt4 book ai didi

c# - Java Tcp Server 和 .Net Tcp Client 发送和接收问题

转载 作者:行者123 更新时间:2023-12-01 13:25:53 24 4
gpt4 key购买 nike

我计划用 C# .NET 编写一个 Java TCP 服务器和一个客户端。我使用 Java 作为服务器,因为我能够在 Linux 上运行服务器。我的问题是 .NET 客户端可以连接到服务器,但如果我向服务器发送一些内容,服务器不会收到任何内容。

这是我的客户:

    static void Main(string[] args)
{
try
{
System.Net.Sockets.TcpClient tcpclnt = new System.Net.Sockets.TcpClient();
Console.WriteLine("Connecting.....");

tcpclnt.Connect("192.168.178.26", 1337);

Console.WriteLine("Connected");
Console.Write("Enter the string to be transmitted : ");

String str = Console.ReadLine();
Stream stm = tcpclnt.GetStream();

ASCIIEncoding asen = new ASCIIEncoding();
byte[] ba = asen.GetBytes(str);
Console.WriteLine("Transmitting.....");

stm.Write(ba, 0, ba.Length);
stm.Flush();

byte[] bb = new byte[100];
int k = stm.Read(bb, 0, 100);

for (int i = 0; i < k; i++)
Console.Write(Convert.ToChar(bb[i]));

tcpclnt.Close();
}

catch (Exception e)
{
Console.WriteLine("Error..... " + e.StackTrace);
}
}

这是我的服务器:

public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;

ServerSocket socket = new ServerSocket(1337);

while(true)
{
System.out.println("... Server gestartet");
Socket connectionSocket = socket.accept();
BufferedReader inputFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
System.out.println(connectionSocket.getRemoteSocketAddress());
DataOutputStream outputStream = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inputFromClient.readLine();
System.out.println("Received: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + "\n";
outputStream.writeBytes(capitalizedSentence);
}
}

我测试的代码只是用于测试与Java服务器的连接的原型(prototype)。我还计划通过 iOS 和 Windows Phone 与 Java Tcp 服务器进行通信。所以我希望你们能为我解答。

最佳答案

您的客户端发送一行字节,并等待响应,保持流打开。

您的服务器在 ReadLine 返回之前等待换行符(或流结束,即连接被关闭)。所以双方都在等待对方。

我建议您在客户端使用包裹流的 OutputStreamWriter - 然后您可以非常简单地使用 WriteLine (而不是自己搞乱编码) )。当服务器看到换行符时,它会做出响应。我还会在客户端上使用 InputStreamReader,而不是在每个字节上调用 Convert.ToChar。从根本上来说,如果您只对传输文本感兴趣并且愿意使用“一行”作为消息传递的单位,那么在两侧使用写入器/读取器对是最简单的方法。

关于c# - Java Tcp Server 和 .Net Tcp Client 发送和接收问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811432/

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