[Java聊天室server]实战之二 监听类
前言
学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的“多谋善断";本系列尽管涉及的是socket相关的知识,但学习之前,更想和广大程序猿分享的是一种心境
:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态。比方近期在看网易公开课MIT《算法导论》,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序猿最好还是从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字......)
原文地址:Building a Java chart server[1]
项目源代码:Socket_Chat
文件夹
正文
server端做什么事情?
在我们解说监听类之前,我们先解说server端。这么做有一个时间上的前提,由于执行系统时,server端必须在不论什么一个client连接它之前先启动。
我们的server端是一个单独的程序 -- 执行在自己机器上单一的Java线程。它执行支持软件不过Java虚拟机。并且它不须要Web server或者应用server,虽然Web server或者应用server被经经常使用作client的server。
很多其它高级的server系统常常在大型架构中嵌入一些服务端代码。这个架构可能提供负载均衡,处理大量的client准备专门的库,进程迁移和数据库服务功能。然而我们的样例有自己的位置。它关心的事全部关于自身的网络响应。正如我们看到的,这并非非常难。
—————————————————————————————————————————————————————————————————————————
监听port
我们首先要多的是准备接受传入的连接。要做到,我们必需要监听port。
port能够觉得是计算机的一个地址。要记住,同一时间,一台计算机能够作为Webserver,聊天server,FTPserver和其它种类的server。正由于如此,连接上一台server不仅要识别该机器地址,还有机器内部的特有服务。内部地址就是所说的port,它用整数表示,1到65535。
很多标准的服务有专用的port号。比如,telnet 是23,FTP是20和21,Webserver,默认上使用的80。因为我们的聊天系统不非常出名,我们使用可分配port号中的一个。
我们用port5000.也就是说我们的server在port5000监听。当我们的client连接上服务端时,会识别server机器上的port号5000。这样一来,client和server端就能够通信了。
—————————————————————————————————————————————————————————————————————————
套接字
client和server端的通信是通过叫做套接字的Java对象建立的。套接字不全然是Java特有的;该术语直接来自于IP(Internet协议)网络编程。在Java编程中,套接字对象简单封装了底层套接字,多年以来Internet程序猿一直使用。用Java语言提取是很简洁,所以Java中的套接字编程会比在C语言中桁架愉快。
最重要的事情是知道套接字对象包括两种流(尤其)。一种用于读取传入的数据,还有一种是数据传输。换句话说,套接字对象有输入流和输出流。
(假设你对流不熟悉,仅仅要理解他们是用于读取和输出数据的对象,数据一般是字节流。假设你还不知道他们,你应该看看java.io包获取很多其它信息)
—————————————————————————————————————————————————————————————————————————
监听类
如今我们開始7个组件中的第一个功能点,监听类。我们称之Server.java
接下来的章节会展示该类的必要元素:构造器和main()程序
—————————————————————————————————————————————————————————————————————————
构造器
server端的构造器须要一个參数 -- port号。它告诉当我们准备启动接收连接时监听什么port。构造器代码例如以下所看到的:
// 构造函数和接收循环一体化
public Server( int port ) throws IOException {
// 我们须要做的是监听
listen( port );
}注意 listen() 函数负责server端剩下的工作。我们在下一节中解说。
—————————————————————————————————————————————————————————————————————————
main() 函数
我们写main() 程序能够让server端独立执行。其实,一旦你有了mian()程序,能够嵌入主要的server代码在某些更大的场合上使用。但对于我们的目的来说,server一直在那里启动。main()代码例如以下所看到的:
// Main程序
// 用法: java Server >port<
static public void main( String args[] ) throws Exception {
// 从命令行中得到端口号
int port = Integer.parseInt( args[0] );
// 初始化server对象,它会自己主动执行并接收连接
new Server( port );
}
—————————————————————————————————————————————————————————————————————————
结束语
如今我们已经准备好监听,我们会在下一节中接续解说怎么接收新的连接和用它哪些事情。
參考文献
[2]. Java sockets 101以及中文系列 JAVA套接字(Socket)101
[3]. Java socket通信基本原理介绍
[Java聊天室server]实战之二 监听类的更多相关文章
- [Java聊天室server]实战之五 读写循环(服务端)
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- [Java聊天室server]实战之三 接收循环
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识.但学习之前,更 ...
- Java中用得比较顺手的事件监听
第一次听说监听是三年前,做一个webGIS的项目,当时对Listener的印象就是个"监视器",监视着界面的一举一动,一有动静就触发对应的响应. 一.概述 通过对界面的某一或某些操 ...
- java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...
- Java 界面编程【03】事件监听
当你把界面都设计好了,总需要添加相应的执行动作给组件,在JAVA中有相应的时间处理机制,叫做“监听器”,给组件添加相应执行动作的过程叫做“注册”,其中的“监听器”是一个接口,里面包含了相应的执行函数, ...
- JAVA实现redis超时失效key 的监听触发
过期事件通过Redis的订阅与发布功能(pub/sub)来进行分发. 而对超时的监听呢,并不需要自己发布,只有修改配置文件redis.conf中的:notify-keyspace-events Ex, ...
- 基于Java+Selenium的WebUI自动化测试框架(四)-----设置监听类
基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来 ...
- Ogre 监听类与渲染流程
Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护, ...
- Android手势监听类GestureDetector的使用
在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...
随机推荐
- Android短彩信源码解析-短信发送流程(二)
转载请注明出处:http://blog.csdn.net/droyon/article/details/11699935 2,短彩信发送framework逻辑 短信在SmsSingleRecipien ...
- 浅析C++基础知识
近期想对C++的面试题目进行一下更加详细的整理.事实上认真思考一下C++程序猿的面试,我们能够发现对程序猿的能力的考察总是万变不离当中,这些基础知识主要分为五部分:一. C/C++基础知识 二. C/ ...
- cacti气象图调整(批量位置调整、更改生成图大小等)
cacti气象图能够非常直观的看到各个节点的流量.这里用的是CactiEZ中文版 V10 1.调整气象图大小 默认有一个1024像素的背景图可选, 这里我们须要新增一个1600像素的背景图. 背景图自 ...
- BZOJ 2718: [Violet 4]毕业旅行( 最长反链 )
一不小心速度就成了#1.... 这道题显然是求最长反链, 最长反链=最小链覆盖.最小链覆盖就是先做一次floyd传递闭包, 再求最小路径覆盖. 最小路径覆盖=N - 二分图最大匹配. 所以把所有点拆成 ...
- BZOJ 1263: [SCOI2006]整数划分( 高精度 )
yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 ----------------------------------------------------- ...
- android:music
package com.terry; import java.io.File; import java.io.FileFilter; import java.io.IOException; impor ...
- ContentProvider中的数据库的生成时机以及ContentResolver的insert()方法总结
经过几天的总结,以及结合一些代码的实际测试,终于算是明白了ContentProvider中的数据的生成时机了. 目录结构: MainActivity.java package com.wyl.cont ...
- php下正则表达式整理
一.正则表达式的历史背景 1,内容深厚的正则表达式 ^.+@.+\\..+$ 形式 字符串搜索与匹配的工具 2,应用范围 手机输入法 Windows文件搜索 linux 列出文件命令 网站用户注册,如 ...
- Java字节码中的方法调用
invokestatic,用于static修饰的方法.任何时候调用的时候只需要类名+方法名即可,无需new.JVM直接将其映射到方法区,执行速度极快.当该方法需要参数的时候,invokestatic会 ...
- MVC-03 控制器(4)
七.模型绑定 在ASP.NET MVC中是通过模型绑定(Model Binding)达到解析客户端传来的数据. 1.简单模型绑定 当网页上有个窗体,且窗体内有个名为Username的输入字段,而Act ...
:学习是一个循序渐进的过程,心态应该随时调节,保持戒骄戒躁的状态。比方近期在看网易公开课MIT《算法导论》,老师提到,学习算法之前要计算机数学+离散数学+概率论等课程的知识,所以一直学不好算法的程序猿最好还是从基础入手,这都是中国式教育惹的祸啊!(此处省略一万字......)