用Java Socket开发支持上千个并发的小型服务器(下)2010-04-15总结一下客户机我们的类研究完了。在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用Socket的步骤:1.用您想连接的机器的IP地址和端口实例化Socket(如有问题则抛出Exception)。2.获取Socket上的流以进行读写。3.把流包装进BufferedReader/PrintWriter的实例,如果这样做能使事情更简单的话。4.对Socket进行读写。5.关闭打开的流。5创建服务器Socket创建RemoteFileServer类
1.import java.io.*;
2.import java.net.*;
3.public class RemoteFileServer {
4.int listenPort;
5.public RemoteFileServer(int listenPort) {
6.this.listenPort=listenPort;
7.}
8.//允许客户机连接到服务器,等待客户机请求
9.public void acceptConnections() {
10.try {
11.ServerSocket server = new ServerSocket(listenPort);
12.Socket incomingConnection = null;
13.while(true) {
14.incomingConnection = server.accept();
15.handleConnection(incomingConnection);
16.}
17.}
18.catch(BindException e) {
19.System.out.println("Unable to bind to port "+listenPort);
20.}
21.catch(IOException e) {
22.System.out.println("Unable to instantiate a ServerSocket on port: "+listenPort);
23.
24.}
25.}
26.//与客户机Socket交互以将客户机所请求的文件的内容发送到客户机
27.public void handleConnection(Socket incomingConnection) {
28.try {
29.OutputStream outputToSocket = incomingConnection.getOutputStream();
30.InputStream inputFromSocket = incomingConnection.getInputStream();
31.BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
32.FileReader fileReader = new FileReader(new File(streamReader.readLine()));
33.BufferedReader bufferedFileReader = new BufferedReader(fileReader);
34.PrintWriter streamWriter = new PrintWriter(incomingConnection.getOutputStream());
35.String line = null;
36.while((line=bufferedFileReader.readLine())!=null){
37.streamWriter.println(line);
38.}
39.fileReader.close();
40.streamWriter.close();
41.streamReader.close();
42.}
43.catch(Exception e) {
44.System.out.println("Error handling a client: "+e);
45.e.printStackTrace();
46.}
47.}
48.public static void main(String args[]) {
49.RemoteFileServer server = new RemoteFileServer(1001);
50.server.acceptConnections();
51.}
52.}