0

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

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

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

4

2 回答 2

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

于 2017-07-08T07:18:04.190 回答
0

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

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

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

客户端发送 GET 文件名

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

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

于 2017-07-08T07:17:23.343 回答