【问题标题】:My application (sever/client) is blocked after using Readline使用 Readline 后我的应用程序(服务器/客户端)被阻止
【发布时间】: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


【解决方案1】:

调用readLine() 是阻塞调用,这意味着你的代码执行将被阻塞,直到并且除非你收到任何来自服务器通信的行。

使用System.Environment.NewLine 而不是\n 来终止C# 代码中的行。

【讨论】:

  • 错了...在 c# 中没有为 socket 刷新...我确定问题出在 java 中...!
  • 不刷新,但请确保发送适当的行结束字符。
  • @ChrisStratton 那是真的..我把“/n”放在最后但也没有工作..!
  • Finalyyyy 一个真正的HEREEEE!非常感谢@Alpesh Gediya:D
  • @HovercraftFullOfEels 哈哈是的你说得对..我应该等一下!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多