文章来源:aspcn 作者:孙雯

服务器Sockets

列表9.2是一个服务器应用程序的一部分.

列表9.2 一个简单的服务器程序

/**

* 一个监听端口并提供HTML文档的程序.

*/

class SimpleWebServer {

public static void main(String args[])

{

ServerSocket serverSocket = null;

Socket clientSocket = null;

int connects = 0;

try

{

{

// 建立一个服务器socket

serverSocket = new ServerSocket(80, 5);

while (connects < 5)

{

// 等待连接

clientSocket = serverSocket.accept();

//服务连接

ServiceClient(clientSocket);

connects++;

}

serverSocket.close();

}

catch (IOException ioe)

{

System.out.println("Error in SimpleWebServer: " + ioe);

}

}

public static void ServiceClient(Socket client)

throws IOException

{

DataInputStream inbound = null;

DataOutputStream outbound = null;

try

{

// 得到IO流

inbound = new DataInputStream( client.getInputStream());

outbound = new DataOutputStream( client.getOutputStream());

//格式化输出(回应头和很少的HTML文档)

StringBuffer buffer = PrepareOutput();

String inputLine;

while ((inputLine = inbound.readLine()) != null)

{

//如果到了HTTP请求的尾部,就发送回应

if ( inputLine.equals("") )

{

outbound.writeBytes(buffer.toString());

break;

}

}

}

finally

{

// 清除

System.out.println("Cleaning up connection: " + client);

tln("Cleaning up connection: " + client);

outbound.close();

inbound.close();

client.close();

client.close();

}

}

服务器并不是主动地建立连接.相反地,他们是被动地监听一个客户端的连接请示然后给他们服务.服务器是由类ServerSocket来建立的.下面的程序建立了一个服务器端socket并把它绑定到80端口:

ServerSocket serverSocket = new ServerSocket(80, 5);

第一个参数是服务器要监听的端口.第二个参数是可选的.API文档中说明了这是一个监听时间,但是在传统的socket程序中第二个参数是监听深度.一个服务器可以同时接收多个连接请求,但是每次只能处理一个.监听堆是一个无回答的连接请求队列.上面的请求建立一个连接来处理最后五个请求.如果省略了后面的一个参数,则默认值是50.

ServerSocket serverSocket = new ServerSocket(80, 5);

一旦socket建立了并开始监听连接,进来的连接将会建立并放在监听堆.accetp()方法把在堆中的连接取出来.

Socket clientSocket = serverSocket.accept();

这个方法返回一个用来与来访者对话的客户端连接.服务器本身不可能建立对话,相反地,服务器socket会使用accept()方法来产生一个新的socket.服务器socket依旧打开并排列新的连接请求.

与客户端socket一样,下面的一步建立输入和输出流:

DataInputStream inbound = new DataInputStream( clientSocket.getInputStream() ); DataOutputStream outbound = new DataOutputStream( clientSocket.getOutputStream() );

一般的I/O操作可以在新建的流中运用.在服务器回应前它等待客户端发送一个空白的行.当会话结束时,服务器关闭流和客户端socket.如果在队列中没有请示将会出现什么情况呢?那个方法将会等待一个的到来.这个行为叫阻塞.accept()方法将会阻塞服务器线程直到一个呼叫到来.当5个连接处理完闭之后,服务器退出.任何的在队列中的呼叫将会被取消.

所有的服务器都要有以下的基本的步骤:

1.建立一个服务器socket并开始监听.

2.使用accept()方法取得新的连接.

3.建立输入和输出流.

4.在已有的协议上产生会话.

5.关闭客户端流和socket.

6.回到第二步或者到第七步.

7.关闭服务器socket.

java socket oc_Java Socket编程(三) 服务器Sockets相关推荐

  1. Java JUC高并发编程(三)-CallableJUC辅助类

    目录 一.Callable接口 二.JUC辅助类 1.减少计数CountDownLatch 2.循环栅栏CyclicBarrier 3.信号灯Semaphore 一.Callable接口 Callab ...

  2. Java语言基础-面向对象编程三步走之打开冰箱门

    开头: 何谓"面向对象" 面向对象是一种编程思想. 思想是一个很虚无缥缈的东西,但是它可以从一个人的具体行动中体现出来,如果说你坚持每天跑步,每天读书,做一些有益于身心健康的事情, ...

  3. asp.core api 通过socket和服务器通信发送udp_读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

  4. java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)

    文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...

  5. java aio socket_java核心学习(三十三) 网络编程---AIO实现异步Socket通信

    AIO需要操作系统的支持,在linux内核2.6版本中加入了对真正异步IO的支持,java从jdk1.7开始支持AIO 核心类有AsynchronousSocketChannel .Asynchron ...

  6. java客户端服务器聊天程序流程图_基于java的socket简单聊天编程

    socket编程: 一:什么是socket:socket是BSD UNIX的通信机制,通常称为"套接字",其英文原意是"孔"或"插座".有些 ...

  7. Java网络编程——9.服务器Socket

    2019独角兽企业重金招聘Python工程师标准>>> 前一章从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打开一个Socket的程序,不过如果不能与服务器对话,客户 ...

  8. Linux C++/Java/Web/OC Socket网络编程

    一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...

  9. Java TCP/UDP socket 编程流程总结

    最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...

最新文章

  1. TC专访Waymo首席技术官:谷歌自动驾驶的过去和未来
  2. 物联网改变生活——飞思卡尔技术论坛中国站侧记
  3. 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战
  4. UOJ#37. 【清华集训2014】主旋律
  5. Integer’s Power HDU - 3208(容斥原理)
  6. 万字长文!搞定逃不脱的 DNS 面试题
  7. 大数据系列2-liunx基础-1操作系统介绍
  8. vcs与quartus联合仿真
  9. 百度大脑5.0实现史上最大升级,发布远场语音交互芯片“鸿鹄”
  10. 怪物刷新时间计时_《冒险岛2》游戏中查找怪物刷新时间
  11. LPVOID和PVOID的区别是什么
  12. 3ds Max小白入门小案例|旋转楼梯
  13. 汇率,汇率接口,汇率行情数据
  14. 李时珍编撰《本草纲目》以《证类本草》为蓝本
  15. 收集的一些学习ios的好网站
  16. C语言解一元二次方程
  17. 字节、字、字长之间的关系
  18. 视频教程-区块链技术原理精讲-区块链
  19. COOX培训材料 — SCADA(2.Slider_R)
  20. geojson 河流_GIS基本概念,空间分析

热门文章

  1. [AX]AX2012 AIF(二):文档服务编程模型
  2. 面向数据流的设计方法
  3. 测绘技术设计规定最新版_测绘技术设计规定
  4. python静态方法可以被继承吗_python 类的继承 实例方法.静态方法.类方法的代码解析...
  5. 牛顿插值--python实现
  6. 【解决问题】OpenCV(3.4.1) Error: Parsing error (xx.yaml(13): Incorrect indentation) in icvYMLParseValue
  7. 5G毫米波三大自然缺陷
  8. c++远征之多态篇——虚函数及其实现原理
  9. MYSQL存储磁盘创建vgcreate_【转】parted创建硬盘分区并创建LVM
  10. 鼠标点击实现花瓣雨_每周实验 | 黄金雨