我们的类研究完了。在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用
Socket的步骤:
1. 用您想连接的机器的IP地址和端口实例化Socket(如有问题则抛出Exception)。
2. 获取Socket上的流以进行读写。
3. 把流包装进BufferedReader/PrintWriter的实例,如果这样做能使事情更简单的话。
4. 对Socket进行读写。
5. 关闭打开的流。
5创建服务器Socket
创建RemoteFileServer类
importjava.io.*;
importjava.net.*;
publicclassRemoteFileServer{
intlistenPort;
publicRemoteFileServer(intlistenPort){
this.listenPort=listenPort;
}
//允许客户机连接到服务器,等待客户机请求
publicvoidacceptConnections(){
try{
ServerSocketserver=newServerSocket(listenPort);
SocketincomingConnection=null;
while(true){
incomingConnection=server.accept();
handleConnection(incomingConnection);
}
}
catch(BindExceptione){
System.out.println("Unabletobindtoport"+listenPort);
}
catch(IOExceptione){
System.out.println("UnabletoinstantiateaServerSocketonport:"+listenPort);
}
}
//与客户机Socket交互以将客户机所请求的文件的内容发送到客户机
publicvoidhandleConnection(SocketincomingConnection){
try{
OutputStreamoutputToSocket=incomingConnection.getOutputStream();
InputStreaminputFromSocket=incomingConnection.getInputStream();
BufferedReaderstreamReader=newBufferedReader(newInputStreamReader
(inputFromSocket));
FileReaderfileReader=newFileReader(newFile(streamReader.readLine()));
BufferedReaderbufferedFileReader=newBufferedReader(fileReader);
PrintWriterstreamWriter=newPrintWriter(incomingConnection.getOutputStream());
Stringline=null;
while((line=bufferedFileReader.readLine())!=null){
streamWriter.println(line);
}
fileReader.close();
streamWriter.close();
streamReader.close();
}
catch(Exceptione){
System.out.println("Errorhandlingaclient:"+e);
e.printStackTrace();
}
}
publicstaticvoidmain(Stringargs[]){
RemoteFileServerserver=newRemoteFileServer(1001);
server.acceptConnections();
}
}
跟客户机中一样,我们首先导入java.net的java.io。接着,我们给我们的类一个实例变量以保存端口
,我们从该端口侦听进入的连接。缺省情况下,端口是1001。
2.跟在客户机中一样,我们用getOutputStream()和getInputStream()来获取与我们刚创建的Socket相
关联的流。跟在客户机端一样,我们把InputStream包装进BufferedReader,把OutputStream包装进
PrintWriter。
3.创建多线程Socket服务器
4.如何限定能同时连接的客户机数目
5.创建带有连接池的Socket服务器
6.只需启动ConnectionHandlerThread一次。