【问题标题】:How to identify the input for the server is of InputStream or Output stream如何识别服务器的输入是 InputStream 还是 Output 流
【发布时间】:2017-07-08 07:03:26
【问题描述】:

我有一个ServerSocket,正在寻求帮助。
我想识别来自InputStreamOutputStream 类型的客户端的请求。我坚持这一点,期待您的帮助

ServerSocket servsock = new ServerSocket(13267);
while (true) {
     System.out.println("Waiting...");

     Socket sock = servsock.accept();
     System.out.println("Accepted connection : " + sock);

     InputStream is = sock.getInputStream();
     new FileServer().receiveFile(is);
     sock.close();
 }

请告诉我如何将它放在条件语句中以提供进一步的执行

【问题讨论】:

  • 1.请细化你的问题。 2. 不要关闭socket,因为FileServer使用它。
  • 我正在使用FTP(文件上传和下载)并提供用户操作以防上传或下载的声明。提供多线程并根据来自客户端的请求,需要调用来自服务器的相应操作。如果我同时提供这两个选项,则执行将停止。需要分别识别输入请求或输出请求向服务器发送文件或从服务器接收文件
  • 对完全没有意义的标题投反对票,更不用说完全不清楚的问题了。

标签: java sockets client server-communication


【解决方案1】:

从服务器端,Socket(在接受客户端连接时由ServerSocket 创建)允许使用输入流从客户端读取(接收)流,并使用输入流向客户端写入(发送)流输出流。

从客户端,它使用相同的逻辑。
Socket 允许使用输入流从服务器读取(接收)流,并使用输出流将流写入(发送)到服务器。

在您的实际代码中:

 Socket sock = servsock.accept();
 InputStream is = sock.getInputStream();

这里你得到了服务器的输入流。
有了它,您可以阅读来自客户端的消息。
例如读取客户端发送的一个字节(当然是读取行,使用BufferedReader等功能更强大的阅读器要好得多):

int b = is.read();

要向客户端写入一个字节,服务器可以这样做:

 OutputStream os = sock.getOutputStream();
 os.write(oneByte);

这里,与InputStream 的注释相同:OutputStream 仅具有写入字节的原始方法。
根据您的要求,使用特定的子类可能会更好。

Oracle 网站上有很好的材料和示例: http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

【讨论】:

  • 我已经浏览了你提到的那个材料,但无法在我的代码中识别
  • 我使用您的实际代码进行了编辑,以便从客户端读取和写入 1 个字节。
  • davidxxx,它帮助了我!!谢谢,我得到了执行
【解决方案2】:

您需要从套接字中读取以确定客户端套接字正在执行的操作。

例如。客户端发送 PUT 文件名

服务器从输入流中读取并将文件保存在文件服务器中

客户端发送 GET 文件名

服务器从输入流中读取文件名并将文件写入输出流

所以这取决于您选择的协议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多