java socket oc_Java Socket编程(三) 服务器Sockets
文章来源: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相关推荐
- Java JUC高并发编程(三)-CallableJUC辅助类
目录 一.Callable接口 二.JUC辅助类 1.减少计数CountDownLatch 2.循环栅栏CyclicBarrier 3.信号灯Semaphore 一.Callable接口 Callab ...
- Java语言基础-面向对象编程三步走之打开冰箱门
开头: 何谓"面向对象" 面向对象是一种编程思想. 思想是一个很虚无缥缈的东西,但是它可以从一个人的具体行动中体现出来,如果说你坚持每天跑步,每天读书,做一些有益于身心健康的事情, ...
- asp.core api 通过socket和服务器通信发送udp_读懂Java中的Socket编程
Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...
- java 中的网络编程(Socket、TCP三次握手四次挥手、TCP/UDP/URL)
文章目录 前言 一.网络编程概述 二.网络通信要素概述 1.如何实现网络中的主机互相通信 2.网络通信协议 3.IP和端口号 4.InetAddress类 5.网络协议 6.TCP/IP协议簇 7.T ...
- java aio socket_java核心学习(三十三) 网络编程---AIO实现异步Socket通信
AIO需要操作系统的支持,在linux内核2.6版本中加入了对真正异步IO的支持,java从jdk1.7开始支持AIO 核心类有AsynchronousSocketChannel .Asynchron ...
- java客户端服务器聊天程序流程图_基于java的socket简单聊天编程
socket编程: 一:什么是socket:socket是BSD UNIX的通信机制,通常称为"套接字",其英文原意是"孔"或"插座".有些 ...
- Java网络编程——9.服务器Socket
2019独角兽企业重金招聘Python工程师标准>>> 前一章从客户端的角度讨论了Socket,客户端就是向监听连接的服务器打开一个Socket的程序,不过如果不能与服务器对话,客户 ...
- Linux C++/Java/Web/OC Socket网络编程
一,Linux C++ Socket网络编程 1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制 ...
- Java TCP/UDP socket 编程流程总结
最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...
最新文章
- TC专访Waymo首席技术官:谷歌自动驾驶的过去和未来
- 物联网改变生活——飞思卡尔技术论坛中国站侧记
- 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战
- UOJ#37. 【清华集训2014】主旋律
- Integer’s Power HDU - 3208(容斥原理)
- 万字长文!搞定逃不脱的 DNS 面试题
- 大数据系列2-liunx基础-1操作系统介绍
- vcs与quartus联合仿真
- 百度大脑5.0实现史上最大升级,发布远场语音交互芯片“鸿鹄”
- 怪物刷新时间计时_《冒险岛2》游戏中查找怪物刷新时间
- LPVOID和PVOID的区别是什么
- 3ds Max小白入门小案例|旋转楼梯
- 汇率,汇率接口,汇率行情数据
- 李时珍编撰《本草纲目》以《证类本草》为蓝本
- 收集的一些学习ios的好网站
- C语言解一元二次方程
- 字节、字、字长之间的关系
- 视频教程-区块链技术原理精讲-区块链
- COOX培训材料 — SCADA(2.Slider_R)
- geojson 河流_GIS基本概念,空间分析
热门文章
- [AX]AX2012 AIF(二):文档服务编程模型
- 面向数据流的设计方法
- 测绘技术设计规定最新版_测绘技术设计规定
- python静态方法可以被继承吗_python 类的继承 实例方法.静态方法.类方法的代码解析...
- 牛顿插值--python实现
- 【解决问题】OpenCV(3.4.1) Error: Parsing error (xx.yaml(13): Incorrect indentation) in icvYMLParseValue
- 5G毫米波三大自然缺陷
- c++远征之多态篇——虚函数及其实现原理
- MYSQL存储磁盘创建vgcreate_【转】parted创建硬盘分区并创建LVM
- 鼠标点击实现花瓣雨_每周实验 | 黄金雨