【问题标题】:Java socket , client and server [closed]Java套接字,客户端和服务器[关闭]
【发布时间】:2013-12-23 17:34:32
【问题描述】:

我想为客户端和服务器建立一个套接字连接以显示文件列表。但下面的代码没有从服务器获取任何输入或向客户端提供输出。请帮忙。

服务器

package javaapplicationthread;

import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintWriter;



public class zs {
  public static int reads,red;  
    public static void main(String[] args) 
    { 
            int flg=0;

           try{while(true){ 
               ServerSocket serverSocket = new ServerSocket(1312);
           Socket clientSocket = serverSocket.accept();

                         BufferedReader bufferedReader;
       PrintWriter outk=new PrintWriter(clientSocket.getOutputStream(),true);

       bufferedReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

       String inputLine = bufferedReader.readLine();
       System.out.println("input is"+ inputLine);
       outk.write("abc");

         File inputFolder = new File(inputLine);
    System.out.println("control is being sent to traverse");
         traverse(inputFolder, "");

    }
           }            
       catch (IOException ex) {
                  System.out.println("my exception is"+ex)
            System.out.println(leftIndent + parentNode.getName());
        }

    }}

【问题讨论】:

  • 欢迎来到 StackOverflow。在此处发布您的代码并说“它不起作用”不是一个有效的问题。
  • Brian Roach - 我在哪里说过它不起作用?它没有给出任何错误,如果我单独运行 traverse(File parentNode, String leftIndent) 函数,它正在工作..但是当我使用套接字时,一切都被阻塞了
  • 您需要在服务器和客户端中关闭您的套接字,并且您需要创建一次ServerSocket,而不是每个循环一次。
  • EJP 感谢您的帮助

标签: java jsp sockets client


【解决方案1】:

在客户端中,当您执行redd = b.readLine(); 时,您要求阅读整行。但是在服务器中,您并没有发送一整行:您只要求它写三个字符:

outk.write("abc");

这三个字符实际上都没有发送,因为 PrintWriter 暂时缓冲它们。要修复它,将该行更改为:

outk.println("abc");

或者:

outk.write("abc\n");
outk.flush();

修改后,客户端成功显示:result is abc

它没有给出任何错误

他们都给出错误...当 readLine 调用失败时,客户端会抛出异常。服务器在开始 while(true) 循环的下一次迭代并尝试重新创建它仍在使用的套接字时抛出异常。您可能希望将 ServerSocket 的创建移到 while 循环之外。

【讨论】:

  • 您的最后一段不正确。首先,服务器失败,尝试将 new ServerSocket 绑定到它已经使用的 port,这会导致它退出,然后重置连接,这会导致 readLine() 失败并抛出 SocketException.
猜你喜欢
  • 2013-01-16
  • 2015-04-07
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多