用Java Socket开发支持上千个并发的小型服务器(上) - 编程入门网
我们能够读取流的行。然后,我们把Socket的OutputStream包装进PrintWriter以使我们能够发送文件请求到服务器:
socketReader = new BufferedReader(new InputStreamReader(client.getInputStream()));socketWriter = new PrintWriter(client.getOutputStream()); 请记住我们的客户机和服务器只是来回传送字节。客户机和服务器都必须知道另一方即将发送的是什么以使它们能够作出适当的响应。在这个案例中,服务器知道我们将发送一条有效的文件路径。 当您实例化一个Socket时,将抛出UnknownHostException。这里我们不特别处理它,但我们打印一些信息到控制台以告诉我们发生了什么错误。同样地,当我们试图获取Socket的InputStream或OutputStream时,如果抛出了一个一般IOException,我们也打印一些信息到控制台。 与主机交谈 这里我们实现getFile()方法,它将告诉服务器我们想要什么文件并在服务器传回其内容时接收该内容。 1.public String getFile(String fileNameToGet) {2. StringBuffer fileLines = new StringBuffer();3. try {4. socketWriter.println(fileNameToGet);5. socketWriter.flush();6. String line = null;7. while((line=socketReader.readLine())!=null)8. fileLines.append(line+"\n");9. }10. catch(IOException e) {11. System.out.println("Error reading from file: "+fileNameToGet);12. }13. return fileLines.toString();14. } 对getFile()方法的调用要求一个有效的文件路径String。它首先创建名为fileLines的StringBuffer,fileLines用于存储我们读自服务器上的文件的每一行。 StringBuffer fileLines = new StringBuffer(); 在try{}catch{}块中,我们用PrintWriter把请求发送到主机,PrintWriter是我们在创建连接期间建立的。 socketWriter.println(fileNameToGet);socketWriter.flush(); 请注意这里我们是flush()该PrintWriter,而不是关闭它。这迫使数据被发送到服务器而不关闭Socket。 一旦我们已经写到Socket,我们就希望有一些响应。我们不得不在Socket的InputStream上等待它,我们通过在while循环中调用BufferedReader上的readLine()来达到这个目的。我们把每一个返回行附加到fileLinesStringBuffer(带有一个换行符以保护行): String line = null;while((line=socketReader.readLine())!=null)fileLines.append(line+"\n"); 断开连接 这里我们实现tearDownConnection()方法,它将在我们使用完毕连接后负责“清除”。tearDownConnection()方法只是分别关闭我们在Socket的InputStream和OutputStream上创建的BufferedReader和PrintWriter。这样做会关闭我们从Socket获取的底层流,所以我们必须捕捉可能的IOException。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |