如何识别服务器的输入是InputStream还是输出流

问题描述:

我有一个ServerSocket并寻求帮助。
我想识别来自InputStreamOutputStream类型的客户端的请求。我坚持这一点,并期待您的帮助如何识别服务器的输入是InputStream还是输出流

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

请告诉我,我怎么可以把它放在一个条件语句来提供进一步的执行

+0

1.优化您的问题,请。 2.自FileServer使用它以来不要关闭套接字。 – Aubin

+0

我正在使用FTP(文件上传和下载)并在上传或下载的情况下提供用户操作。提供多线程并基于来自客户端的请求,需要调用来自服务器的相应操作。如果我提供两个选项执行正在停止。需要识别输入请求或输出请求将文件发送到服务器或分别从服务器接收文件 – Bhat

+0

Downvote为完全无意义的标题,更不用说完全不清楚的问题。 – EJP

从服务器端的协议中,Socket(由ServerSocket当客户端连接被接受创建)允许使用输入流从客户端读取(接收)流,并使用输出流将流写入(发送)到客户端。

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

在您的实际代码:

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

在这里,您获取服务器的输入流。
有了它,你可以阅读来自客户端的消息。
例如读取一个字节由客户机发送的(当然读取线,使用更多特色读者如BufferedReader更好):

int b = is.read(); 

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

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

在这里,同样的评论为InputStreamOutputStream只有原始的方法来写字节。
根据您的要求,使用特定的子类可能会更好。

你有甲骨文网站上很好的材料和例子: http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

+0

我已经使用了您提到的材料,但无法识别我的代码 – Bhat

+1

,我使用您的实际代码进行了编辑,以读取和写入客户端的1个字节。 – davidxxx

+0

davidxxx,它帮助了我!谢谢,我得到了执行 – Bhat

你需要从套接字读取识别哪些客户端套接字正在执行。

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

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

客户端发送获取文件名

服务器从输入流中读取文件名和文件写入到的OutputStream

所以这取决于你是选择