java socket编程,多线程,客户端服务端

来源:互联网 发布:编程真好玩 pdf 编辑:程序博客网 时间:2024/06/06 01:21

我们的类研究完了。在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用

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一次。

原创粉丝点击