【发布时间】:2021-06-20 19:34:02
【问题描述】:
我正在处理 Java-C# 套接字通信,我想定期将 C# 对象的坐标发送到 java。问题是当我关闭连接时,java 客户端 Stream 只读取坐标(20 英里长的缓冲区)。我希望连接保持打开状态并更新坐标,而不必一直打开和关闭此连接。 附言这是可行的,但我以某种方式删除了以前使用的 C# 脚本,现在我无法弄清楚。
Java LocationRequester,将connect 发送到服务器,然后定期调用getline() 并将其传递给坐标。连接部分有效,getline() 只有在我关闭连接时才能完成,否则它会挂起。当我关闭连接时,我会得到一排超长的坐标。
public Socket clientSocket;
BufferedReader inputBuff;
String hostName;
int hostPort;
public LocationListener(String host, int port) {
hostName = host;
hostPort = port;
}
public void connect()
{
try {
clientSocket = new Socket(hostName, hostPort);
System.out.println("Connected to"+clientSocket.toString());
InputStream input = clientSocket.getInputStream();
InputStreamReader reader = new InputStreamReader(input);
inputBuff = new BufferedReader(reader);
String str;
}
catch(IOException e)
{
e.printStackTrace();
}
}
public String getLine() {
String rstring = "";
try {
rstring = inputBuff.readLine();
System.out.println(rstring);
}
catch(IOException e) {
e.printStackTrace();
}
return rstring;
}
C# 代码似乎是问题所在。
private void Start()
{
IPAddress address = IPAddress.Any;
server = new TcpListener(address, 9999);
server.Start();
client = server.AcceptTcpClient();
StartCoroutine(SendCords());
}
private IEnumerator SendCords()
{
while (true)
{
yield return new WaitForSeconds(0.5f);
NetworkStream stream = client.GetStream();
byte[] msg = System.Text.Encoding.ASCII.GetBytes(transform.position.ToString());
stream.Write(msg, 0, msg.Length);
stream.Flush();
// client.Close();
Debug.Log("Sending "+transform.position);
}
}
【问题讨论】: