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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值