如何识别服务器的输入是InputStream或Output流

时间:2017-07-08 07:03:26

标签: java sockets client server-communication

我有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();
 }

请告诉我如何将其置于条件陈述中以提供进一步的执行

2 个答案:

答案 0 :(得分: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 :(得分:0)

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

EG。客户端发送PUT文件名

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

客户端发送GET文件名

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

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