快速业务通道

Java编程那些事儿104——网络编程技术3 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
的逻辑处理,将处理的逻辑放置在该类的run方法中。该示例的代码实现为:

package tcp; import java.net.ServerSocket; import java.net.Socket; /** * 支持多客户端的服务器端实现 */ public class MulThreadSocketServer {  public static void main(String[] args) {   ServerSocket serverSocket = null;   Socket socket = null;   //监听端口号   int port = 10000;   try {    //建立连接    serverSocket = new ServerSocket(port);    System.out.println("服务器已启动:");    while(true){     //获得连接     socket = serverSocket.accept();     //启动线程     new LogicThread(socket);    }   } catch (Exception e) {     e.printStackTrace();   }finally{     try{      //关闭连接      serverSocket.close();     }catch(Exception e){}   }  } }

在该示例代码中,实现了一个while形式的死循环,由于accept方法是阻塞方法,所以当客户端连接未到达时,将阻塞该程序的执行,当客户端到达时接收该连接,并启动一个新的LogicThread线程处理该连接,然后按照循环的执行流程,继续等待下一个客户端连接。这样当任何一个客户端连接到达时,都开启一个专门的线程处理,通过多个线程支持多个客户端同时处理。

Java编程那些事儿104——网络编程技术3(4)

时间:2010-03-20 csdn 陈跃峰

下面再看一下LogicThread线程类的源代码实现:

package tcp; import java.io.*; import java.net.*; /** * 服务器端逻辑线程 */ public class LogicThread extends Thread {  Socket socket;  InputStream is;  OutputStream os;  public LogicThread(Socket socket){   this.socket = socket;   start(); //启动线程  }  public void run(){   byte[] b = new byte[1024];   try{     //初始化流     os = socket.getOutputStream();     is = socket.getInputStream();     for(int i = 0;i < 3;i++){      //读取数据      int n = is.read(b);      //逻辑处理      byte[] response = logic(b,0,n);      //反馈数据      os.write(response);     }   }catch(Exception e){     e.printStackTrace();   }finally{     close();   }  }  /**  * 关闭流和连接  */  private void close(){   try{    //关闭流和连接    os.close();    is.close();    socket.close();   }catch(Exception e){}  }  /**  * 逻辑处理方法,实现echo逻辑  * @param b 客户端发送数据缓冲区  * @param off 起始下标  * @param len 有效数据长度  * @return  */  private byte[] logic(byte[] b,int off,int len){   byte[] response = new byte[len];   //将有效数据拷贝到数组response中   System.arraycopy(b, 0, response, 0, len);   return response;  } }

在该示例代码中,每次使用一个连接对象构造该线程,该连接对象就是该线程需要处理的连接,在线程构造完成以后,该线程就被启动起来了,然后在run方法内部对客户端连接进行处理,数据交换的逻辑和前面的示例代码一致,只是这里将接收到客户端发送过来的数据并进行处理的逻辑封装成了logic方法,按照前面介绍的IO编程的内容,客户端发送过来的内容存储在数组b的起始下标为0,长度为n个中,这些数据是客户端发送过来的有效数据,将有效的数据传递给logic方法,logic方法实现的是echo服务的逻辑,也就是将客户端发送的有效数据形成以后新的response数组,并

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号