快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
s MulSocketServer {  public static void main(String[] args) {   ServerSocket serverSocket = null;   Socket socket = null;   OutputStream os = null;   InputStream is = null;   //监听端口号   int port = 10000;   try {    //建立连接    serverSocket = new ServerSocket(port);    System.out.println("服务器已启动:");    //获得连接    socket = serverSocket.accept();    //初始化流    is = socket.getInputStream();    os = socket.getOutputStream();    byte[] b = new byte[1024];    for(int i = 0;i < 3;i++){     int n = is.read(b);     //输出     System.out.println("客户端发送内容为:" + new String(b,0,n));     //向客户端发送反馈内容     os.write(b, 0, n);    }   } catch (Exception e) {     e.printStackTrace();   }finally{     try{      //关闭流和连接      os.close();      is.close();      socket.close();      serverSocket.close();     }catch(Exception e){}   }  } }

在该示例代码中,也将数据发送和接收的逻辑写在了一个for循环内部,只是在实现时硬性的将循环次数规定成了3次,这样代码虽然比较简单,但是通用性比较差。

以该服务器端代码实现为基础运行前面的客户端程序时,客户端的输出为:

服务器反馈:First

服务器反馈:Second

服务器反馈:Third

服务器端程序的输出结果为:

服务器已启动:

客户端发送内容为:First

客户端发送内容为:Second

客户端发送内容为:Third

在该程序中,比较明显的体现出了“请求-响应”模型,也就是在客户端发起连接以后,首先发送字符串“First”给服务器端,服务器端输出客户端发送的内容“First”,然后将客户端发送的内容再反馈给客户端,这样客户端也输出服务器反馈“First”,这样就完成了客户端和服务器端的一次对话,紧接着客户端发送“Second”给服务器端,服务端输出“Second”,然后将“Second”再反馈给客户端,客户端再输出“Second”,从而完成第二次会话,第三次会话的过程和这个一样。在这个过程中,每次都是客户端程序首先发送数据给服务器端,服务器接收数据以后,将结果反馈给客户端,客户端接收到服务器端的反馈,从而完成一次通讯过程。

在该示例中,虽然解决了多次发送的问题,但是客户端和服务器端的次数控制还不够灵活,如果客户端的次数不固定怎么办呢?是否可以使用某个特殊的字符串,例如quit,表示客户端退出呢,这就涉及到网络协议的内容了,会在后续的网络应用示例部分详细介绍。下面开始介绍另外一个网络编程的突出问题。

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

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

2、如何使服务器端支持多个客户端同时工作?

前面介绍的服务器端程序,只是实现了概念上的服务器端,离实际的服务器端程序结构距离还很遥远,如果需要让服务器端能够实际使用,那么最需要解决的问题就是——如何支持多个客户端同时工作。

一个服务器端一般都需要同时为多个客户端提供通讯,如果需要同时支持多个客户端,则必须使用前面介绍的线程的概念。简单来说,也就是当服务器端接收到一个连接时,启动一个专门的线程处理和该客户端的通讯。

按照这个思路改写的服务端示例程序将由两个部分组成,MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号