TCP客户端(java)没有';无法从TCP服务器(C#)接收消息
我有一个用C#编写的GUI TCP服务器,它监听4444端口,还有一个连接到4444端口的GUI java客户端。我可以将消息从客户端发送到服务器,服务器端文本字段设置为message,但当我将消息从服务器发送到客户端时,客户端文本字段中不会显示任何消息(控制台中也不会显示任何结果)。我需要帮助 --从服务器向客户端发送消息的代码------C# ----Java客户端代码-----TCP客户端(java)没有';无法从TCP服务器(C#)接收消息,java,c#,sockets,tcp,network-programming,Java,C#,Sockets,Tcp,Network Programming,我有一个用C#编写的GUI TCP服务器,它监听4444端口,还有一个连接到4444端口的GUI java客户端。我可以将消息从客户端发送到服务器,服务器端文本字段设置为message,但当我将消息从服务器发送到客户端时,客户端文本字段中不会显示任何消息(控制台中也不会显示任何结果)。我需要帮助 --从服务器向客户端发送消息的代码------C# ----Java客户端代码----- public void run()引发IOException { 插座=新插座(“127.0.0.1”,4444
public void run()引发IOException
{
插座=新插座(“127.0.0.1”,4444);
BufferedReader in=新的BufferedReader(新的InputStreamReader(socket.getInputStream());
out=新的PrintWriter(socket.getOutputStream(),true);
字符串输入线;
而((inputLine=in.readLine())!=null)
{
System.out.println(“客户端<”+输入行);
rxArea.setText(输入行);
}
out.close();
in.close();
socket.close();
}
注意:客户端和服务器之间的通信工作正常,只是服务器和客户端之间存在问题
更新:-
我关闭了网络流,它工作了!!!但由于我在服务器中运行另一个子线程来侦听传入流,因此当我关闭网络流时,它会抛出异常并停止执行。在服务器代码中,您似乎没有关闭网络流。然后清除缓冲区,这可能发生在流完成发送数据之前。下面是一个创建TCP服务器的示例,它是C#(dotnetcore)。
Readline()需要'\n'作为消息终止。因为已发送的消息中没有终止,Readline一直在阅读,并且未设置消息。是的,谢谢!它工作了,但我有一个正在运行的子线程来侦听传入的消息。因此,当我关闭网络流时,它基本上会关闭侦听线程,抛出“System.IO.IOException:”无法从传输连接读取数据:阻塞操作被对WSACancelBlockingCall的调用中断。。您从文本框中获取文本,然后将换行符附加到文本框中,然后将您在没有换行符的情况下读取的文本发送到客户端,客户端正在使用readLine()读取。是!但如果我从服务器发送消息,客户端就不会接收到消息。
private void button1_Click(object sender, EventArgs e)
{
String outmsg = textBox1.Text;
textBox1.Text = "";
byte[] bytes = Encoding.ASCII.GetBytes(outmsg);
String Msg = Encoding.ASCII.GetString(bytes);
richTextBox1.AppendText("\n\n" + Msg);
networkStreamData.Write(bytes, 0, bytes.Length); //NetworkStream
bytes = new byte[1024]; //For clearing the buffer
}
public void run () throws IOException
{
Socket socket = new Socket ("127.0.0.1", 4444);
BufferedReader in = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
out = new PrintWriter (socket.getOutputStream (), true);
String inputLine;
while ((inputLine = in.readLine ()) != null)
{
System.out.println ("Client < " + inputLine);
rxArea.setText (inputLine);
}
out.close();
in.close();
socket.close();
}