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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析bootstrap原理及优缺点

网格系统的实现原理&#xff0c;是通过定义容器大小&#xff0c;平分12份(也有平分成24份或32份&#xff0c;但12份是最常见的)&#xff0c;再调整内外边距&#xff0c;最后结合媒体查询&#xff0c;就制作出了强大的响应式网格系统网格系统的实现原理&#xff0c;是通过定义容…

如何把一个float存到一个长度为4的char数组中?

我以前以为它是可以这样的看代码#include "stdio.h"int main(void) {float fa 123.56;char farray[4] {0};farray[0] ((int)fa>> 24)&0xFF;farray[1] ((int)fa>> 16)&0xFF;farray[2] ((int)fa>> 8 )&0xFF;farray[3] ((int)fa>…

OSPF次末节区域配置 201

【实验拓扑】 【实验基本配置】1、按照上图配置相应接口以及OSPF【实验要求】 1、配置Area 1 为NSSA区域2、在R6上配置1条静态路由160.1.60.0/24指向 Null0&#xff0c;并充分发到OSPF中3、将路由器1的ID修改为150.1.100.100【实验分析】次末节区域&#xff08;NSSA&#xff09…

sort和qsort函数

http://blog.csdn.net/morninghapppy/article/details/6703058 http://blog.csdn.net/rns521/article/details/7473558 http://blog.csdn.net/u012209626/article/details/48792049转载于:https://www.cnblogs.com/Emilylice/p/7689099.html

MTK联发科2021 嵌入式C笔试题分析

题目-分割字符串因为题目是考试的同学凭记忆记下来的&#xff0c;没有记得特别仔细&#xff0c;题目只是写了个大概&#xff0c;我也是凭自己的想法来理解。输入aaa;bbb;ccc输出aaa bbb ccc /*--------------------------------------------*/ 输入,hello,hello,,输出hello hel…

java 打印三维数组_Java基础第三天_数组

1.定义一个函数&#xff0c;函数功能是动态提取int[]中元素的最大值。2.定义一个函数&#xff0c;从数组中查询指定的元素首次出现的位置。3.定义函数&#xff0c;完成冒泡排序&#xff0c;大数下沉。4.折半查找。5.阐述6.定义一个函数&#xff0c;实现矩阵的转置.arr[i][j] a…

DEVICE_ATTR设置0777引发血案

这个宏我们在内核里面使用非常频繁&#xff0c;这个宏的作用可以抛出sys设备节点给用户使用。用户可以读写sys/class下面的文件节点&#xff0c;以达到控制内核驱动的功效。比如&#xff0c;像这样的设备节点weiqifa:/sys/class/zigbee/onoff $ ls gpio_en power subsystem uev…

试用Mono Beta 1.0

下载地址: http://www.go-mono.com/download.html测试环境:Windows XP、Windows 2003测试代码:F:\HelloWorld.csusing System;namespace mynamespace { public class HelloWorld { public static void Main(string [] args) { Console.WriteLine("hello, world"…

线性链表java实现_java实现线性单链表

/**** 线性单链表*/public class LinkedLinearList {private Node head;private int length;// 实际长度/*** 初始化顺序表,长度为length*/public LinkedLinearList() {length 0;head new Node(0, null);length;}/*** 将index位置赋值为c&#xff0c;会覆盖掉原值** param in…

「任性」的C语言之父:因拒付论文装订费错失博士学位,论文52年后重见天日...

他是C语言之父、1983年图灵奖得主&#xff0c;还是Unix的关键开发者。然而&#xff0c;他却因为「任性」没有拿到博士学位&#xff0c;而且当年写的博士论文一丢就是半个世纪。如今&#xff0c;这一神秘的博士论文终于重见天日。很多人可能听说过 Dennis Ritchie 这个人。上世纪…

CS224n笔记3 高级词向量表示

本文转自&#xff1a;http://www.hankcs.com/nlp/cs224n-advanced-word-vector-representations.html 这节课从传统的基于计数的全局方法出发&#xff0c;过渡到结合两者优势的GloVe&#xff0c;并介绍了词向量的调参与评测方法。 复习&#xff1a;word2vec的主要思路 遍历整个…

C# 2.0对现有语法的改进

C# 2.0对现有语法的改进 原注&#xff1a;lover_P出处&#xff1a; [自序] 尽管Microsoft Visual Studio .NET 2005&#xff08;过去好像叫Visual Studio .NET 2004&#xff09;一再推迟其发布日期&#xff0c;但广大开发者对其的猜测以及各种媒体对其各方面的“曝光”也似乎已…

一个java类运行时从哪个方法开始_Java的应用程序是从类中的

【填空题】还不走,车来了。【填空题】进路是 运行时所经由的路径。【单选题】()是仿照法国巴黎圣母院设计建造的:【简答题】结合你学习的感受,你认为会计核算程序三大会计要素顺序可以颠倒吗?【填空题】一往无前马当先。【听力题】【判断题】企业所得税是直接税,其纳税人与负税…

C# 第一章 笔记

目录&#xff1a;硬盘 - 工具软件 - 编程开发 - Visual Studio软件&#xff1a;序列号、安装包、魔方虚拟光驱(win7) Visual Studio 2013.exeVisual Studio 2013.msiVisual Studio 2013.iso光盘 -> 光驱光盘镜像文件 -> 虚拟光驱 Win7安装会警告&#xff1a;您当前系统IE…

一粒老鼠屎

我又老生常谈了。本来很久都不去CSDN看文档的评论了。但是今天忍不住又瞄到了几眼&#xff0c;一看那些不屑的&#xff0c;骂人的腔调的评论&#xff0c;就心里堵得难受。CSDN的blog现在可想而知&#xff0c;当应很热闹。但透明和曾毅还有我都没有去用它的blog&#xff0c;我想…

我在深圳,但是家里托人在老家找了一份工作

最近&#xff0c;在微信公众号后台收到一份读者的留言&#xff0c;而且这位读者也是我们GX的&#xff0c;而且更幸运的是&#xff0c;跟我是一个地方的。她是疑惑如下~前辈你好~ 今天看到最新一篇有关读书的推文发现同是HC老乡&#xff0c;斗胆向您请教一些问题&#xff0c;有点…

Django之项目搭建和配置总结(一)

安装和创建虚拟环境 参考&#xff1a;linux系统下Python虚拟环境的安装和使用安装Django包 先进入虚拟环境&#xff0c;在联网下执行&#xff1a;pip install django1.8.7 1.8.7表示django的版本&#xff0c;如果不指定&#xff0c;会默认安装最新版的django。包会被安装到/usr…

java长连接例子_java实现长连接

();public Client(String serverIp, int port) {this.serverIpserverIp;this.portport;}public void start() throws UnknownHostException, IOException {if(running)return;socket new Socket(serverIp,port);System.out.println("本地端口&#xff1a;"socket.ge…

怎么把一个bool数组转成char?

这个是在知乎上看到的问题&#xff0c;分享给大家&#xff0c;如果有不同的答案&#xff0c;欢迎评论回复。知乎惯例谢邀人在厕所&#xff0c;刚刚蹲下因为最近都流行长文&#xff0c;但是作为日更而且更喜欢表达自己看法的我&#xff0c;力争文章是自己想发的&#xff0c;而且…

日本語勉強資源

ウェブ頁注音 http://www.hiragana.jp/ &#xff08;看新闻学背单词容易多了&#xff09;通訳 http://www.excite.co.jp &#xff08;单词&#xff0f;句子&#xff0f;网页翻译&#xff09;