zoukankan      html  css  js  c++  java
  • [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 );
    }

    —————————————————————————————————————————————————————————————————————————

    结束语

    如今我们已经准备好监听,我们会在下一节中接续解说怎么接收新的连接和用它哪些事情。

    參考文献

    [1]. Building  a Java chart server

    [2]. Java sockets 101以及中文系列 JAVA套接字(Socket)101

    [3]. Java socket通信基本原理介绍

  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3895710.html
Copyright © 2011-2022 走看看