【发布时间】:2019-04-15 10:22:37
【问题描述】:
我正在尝试使用 TCP 将 json 从 C# 服务器传递到 Java 服务器,问题是 Java 服务器第一次似乎接收到一个空的 json。第二次及以后它工作正常,请参阅下面的输出。欢迎任何想法或建议,在此先感谢。
输出:
Starting server...
Waiting for a connection..
Connected!
Reading...
Received empty object
Received:
Connected!
Reading...
Received: "Request:gethotellist"
Connected!
Reading...
Received: "Request:gethotellist"
这里是发送json的C#代码sn-p:
public void GetHotelList()
{
TcpClient clientSocket = new TcpClient();
clientSocket.Connect("127.0.0.1", 6767);
NetworkStream ns = clientSocket.GetStream();
string jsonRequest = "Request:gethotellist";
string jsonToSend = JsonConvert.SerializeObject(jsonRequest);
byte[] dataBytes = Encoding.UTF8.GetBytes(jsonToSend);
ns.Write(dataBytes, 0, dataBytes.Length);
ns.Close();
}
Java 服务器:
public class JHotelServer
{
public static void main(String[] args) throws IOException
{
final int PORT = 6767;
System.out.println("Starting server...");
@SuppressWarnings("resource")
ServerSocket welcomeSocket = new ServerSocket(PORT);
System.out.println("Waiting for a connection..");
while(true)
{
try
{
Socket connectionSocket = welcomeSocket.accept();
System.out.println("Connected!");
Thread connectionThread = new Thread(new TcpConnectionManager(connectionSocket));
connectionThread.start();
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
}
这里是 Tcp 通信管理器:
public class TcpConnectionManager implements Runnable
{
private DataInputStream inFromDotNet;
public TcpConnectionManager(Socket socket) throws IOException
{
inFromDotNet = new DataInputStream(socket.getInputStream());
}
@Override
public void run()
{
try
{
System.out.println("Reading...");
byte[] rvdMsgByte = new byte[inFromDotNet.available()];
// Collecting data into byte array
for (int i = 0; i < rvdMsgByte.length; i++)
{
rvdMsgByte[i] = inFromDotNet.readByte();
}
if (rvdMsgByte.length == 0)
{
System.out.println("Received empty object");
}
// Converting collected data in byte array into String.
String rvdMsgTxt = new String(rvdMsgByte);
System.out.println("Received: " + rvdMsgTxt);
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
【问题讨论】: