C#客户端。从C#客户端发送数据到Java服务器
问题描述:
我有类似的问题,发布here,有跟随所有的答案,但得到空字符串作为响应。 数据。
这里是我的代码:发送消息之后和接收响应前右
断开连接:
try
{
string ENDOFLINE = "\r\n";
TcpClient client = new TcpClient(txtIP.Text, Int32.Parse(txtPort.Text));
NetworkStream stream = client.GetStream();
byte[] data = Encoding.ASCII.GetBytes(txtMessage.Text + ENDOFLINE);
stream.Write(data, 0, data.Length);
String responseData = String.Empty;
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
stream.Close();
client.Close();
}
catch(Exception ex)
{
Console.WriteLine(ex.message);
}
解决方案。我跟着这article
答
你的代码工作正常,但只有当服务器端是合作的。
我测试了由具有从Christian Tucker有稍微改变运行实现简单的Java服务器的实现:
public void run()
{
while(isRunning)
{
try
{
clientSocket = serverSocket.accept();
System.out.println("Client Connected from " + clientSocket.getInetAddress().getHostAddress() + ":" + clientSocket.getPort());
recv = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println("Data Recieved: " + recv.readLine());
// make sure to send something back ...
OutputStreamWriter wr = new OutputStreamWriter(clientSocket.getOutputStream());
wr.write("FuBar!\r\n");
// and flush!
wr.flush();
clientSocket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
没有对OutputStreamWriter调用flush
我得到了相同的结果,当您:数据得到了成功发送,但收到一个空的回应。
它有助于在这些情况下使两端运行在调试器中。
+0
有趣的是,我要检查开发服务器端的人,希望这能解决我的问题。一旦确认,我会接受您的解决方案。谢谢你的帮助。 – budiantoip
+0
嗨,谢谢你的帮助,我终于找到了正确的解决方案:) – budiantoip
请始终在问题本身中发布代码,而不是通过外部链接,因此如果链接死亡,问题不会变得无用。 –
@PeterB,感谢您的建议,我编辑了这篇文章:) – budiantoip
你不能发送从C#到Java和VV的字节数组,因为Java使用sbyte而不是字节...你应该改变 byte [] data = Encoding.ASCII .GetBytes(txtMessage.Text + ENDOFLINE); – Alrehamy