【发布时间】:2013-05-16 06:48:21
【问题描述】:
我正在尝试在服务器和客户端之间建立 tcp 连接。服务器是在 c# 上编写的,客户端是在 java 上编写的……服务器工作正常……我的问题出在这段代码中:
try {
InetAddress address = InetAddress.getByName("127.0.0.1");
connection = new Socket(address, port);
BufferedReader inFromServer = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
loginInfo = inFromServer.readLine();
System.out.println("username/pass are received");
System.out.println(loginInfo);
connection.close();
} catch (IOException f) {
System.out.println("IOException: " + f);
} catch (Exception g) {
System.out.println("Exception: " + g);
}
应用程序被阻止,我无法再关闭它......直到我从 java 完成调试。 我想问题出在 loginInfo 中,因为我没有在输出中收到用户名/密码。所以有什么帮助吗?
这是从 c# 发送消息的线程:
Thread listener_service = new Thread((ThreadStart)delegate
{
listener.Start();
while (true)
{
s = listener.AcceptSocket();
Console.WriteLine("Connected to !" + s.RemoteEndPoint);
ASCIIEncoding asen = new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server. \n"));
Console.WriteLine("\nSent Acknowledgement");
continue;
}
});
【问题讨论】:
-
您的 C# 代码是否发送一个结尾带有回车/换行符的字符串?
-
为什么不在
while循环中编写inFromServer.readLine()?您如何知道是否没有更多数据要从服务器读取? -
在您的 C# 代码中
s.Send之后调用flush。 -
我不知道 C# 库,抱歉。 (您的问题与不刷新缓冲区的症状相匹配,所以这是我的猜测)。
-
任何时候您在编写 TCP 客户端/服务器代码时遇到困难,您应该做的第一件事是针对名为 netcat 的小型便携式开源程序测试两端。这应该让您可以手动与每一端交互(假设您使用监听支持选项构建它)并找出您的哪些程序的行为与您的预期不同。
标签: c# java sockets bufferedreader