【问题标题】:Desktop client web server communication桌面客户端 Web 服务器通信
【发布时间】:2012-09-19 10:06:33
【问题描述】:

我正在做客户端服务器通信。我通过URLConnection 类连接了两者。

现在我正在尝试向服务器发送登录信息,服务器将检查信息是否正确,否则它将要求我再次登录,对于这种情况,我们假设登录不成功。但是当我再次尝试发送登录信息时得到服务器的响应后,我得到了

java.net.ProtocolException: Cannot write output after reading input.

这是我的代码:

URL url = new URL(uniRL);

java.net.URLConnection connection = url.openConnection();
connection.setAllowUserInteraction(true);
connection.setDoOutput(true);

while(true){
    System.out.println("Enter 1-login , 2-Exit");
useroption = input.nextLine();
numOption = Integer.parseInt(useroption);
if( numOption == 1){
    OutputStreamWriter writer = new OutputStreamWriter(
            connection.getOutputStream());
    user_login = login();
    writer.write(user_login[0]+"@");
    writer.write(user_login[1]);
    writer.flush();
    //out.close();
    BufferedReader in = new BufferedReader(
            new InputStreamReader(
                    connection.getInputStream()));
    while ((tempString = in.readLine()) != null) {
        decodedString = tempString;
        //System.out.println(decodedString);
        //System.out.println(decodedString.equalsIgnoreCase("unknown user"));
    }
    in.close();
    if((decodedString.equalsIgnoreCase("unknown user"))){continue;}
    else{break;}
}

【问题讨论】:

  • 哪一行是你得到这个异常的地方?发布异常跟踪会有所帮助。
  • 循环进行第二次迭代时出现异常。并尝试第二次写东西。

标签: java servlets webserver client-server protocolexception


【解决方案1】:

当您调用in.close() 时,您实际上是在关闭 URL 连接使用的流。您需要再次致电url.openConnection() 才能重新打开流...

【讨论】:

  • 兄弟感谢帮助我在没有 in.close() 的情况下尝试了它。它仍然无法正常工作。我得到了同样的例外....
  • 我不知道你为什么选择URLConnection 来做这件事,我个人可能会直接连接Socket
  • 你能给我一些很好的例子/链接,以便将套接字与桌面(客户端)和 Web 服务器一起使用吗?这将非常有帮助..thankyou
  • @HaseebWali 你用的是什么协议?? HTTP??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2012-12-26
  • 2011-09-05
  • 2012-03-01
相关资源
最近更新 更多