C/S环境下Java应用程序运行过程讲解

客户机/服务器在分布处理过程中,使用基于连接的网络通信模式。该通信模式首先在客户机和服务器之间定义一套通信协议,并创建一Socket类,利用这个类建立一条可靠的链接;然后,客户机/服务器再在这条链接上可靠地传输数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。这就是典型的"请求--应答" 模式。下面是客户机/服务器的一个典型运作过程:

1、服务器监听相应端口的输入;

2、客户机发出一个请求;

3、服务器接收到此请求;

4、服务器处理这个请求,并把结果返回给客户机;

5、重复上述过程,直至完成一次会话过程。

按照以上过程,我们使用Java语言编写一个分别针对服务器和客户机的应用程序(Application)。该程序在服务器上时,程序负责监听客户机请求,为每个客户机请求建立Socket连接,从而为客户机提供服务。本程序提供的服务为:读取来自客户机的一行文本,反转该文本,并把它发回给客户机。

通过该程序实例我们看到,使用Java语言设计C/S程序时需要注意以下几点:

(1)、 服务器应使用ServerSocket

类来处理客户机的连接请求。当客户机连接到服务器所监听的端口时,ServerSocket将分配一新的Socket对象。这个新的Socket 对象将连接到一些新端口,负责处理与之相对应客户机的通信。然后,服务器继续监听ServerSocket,处理新的客户机连接。

Socket 和ServerSocket 是Java网络类库提供的两个类。

(2)、服务器使用了多线程机制。Server对象本身就是一个线程,它的run()方法是一个无限循环,用以监听来自客户机的连接。每当有一个新的客户机连接时,ServerSocket就会创建一个新的Socket类实例,同时服务器也将创建一新线程,即一个Connection 对象,以处理基于Socket 的通信。与客户机的所有通信均由这个Connection 对象处理。Connection的构造函数将初始化基于Socket 对象的通信流,并启动线程的运行。与客户机的通信以及服务的提供,均由Connection对象处理。

时间: 2025-01-02 03:26:38

C/S环境下Java应用程序运行过程讲解的相关文章

《C语言开发从入门到精通》一2.2 在Windows环境下开发C程序

2.2 在Windows环境下开发C程序 知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\在Windows环境下开发C程序.mp4 DOS环境对广大读者来说十分陌生,并且在DOS下进行开发也十分麻烦.为此,专门推出了Windows环境下的开发工具.Win-TC其实就是一种Windows环境下的开发工具,但是其功能和Turbo C基本类似,只是在编译和运行上更加方便而已.随着计算机技术的发展,编程工具也随之更新换代.目前最受程序员喜爱的开发工具,当属微软的Visual Studio. 2.2

mingw-Code::Blocks Windows环境下编译HelloWorld程序报错,求高手支招!

问题描述 Code::Blocks Windows环境下编译HelloWorld程序报错,求高手支招! 很简单的Hello World 程序,编译时提示: D:MinGWincludec++3.4.5bitscodecvt.h|475 这个文件中引用的 bits/codecvt_specializations.h 文件找不到 请问是哪里出了问题? ?

段错误-在ubuntu环境下执行python程序,报错 segment error

问题描述 在ubuntu环境下执行python程序,报错 segment error 请教各位朋友们,应该如何查看出错的代码文件和行数呢,只报错segment error,无法知道程序哪里错了.而且程序本身很长,大概几千行代码,没有错误定位很难调试. 请问如何打印出具体的错误信息呢,或者如何调试呢? 在此,先谢谢各位朋友们了. 解决方案 生成dump文件,然后gdb调试.看堆栈. 不过你python程序还可以对print打印信息来分析. 解决方案二: segment error 往往是指针的问题

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

求解答:java小程序执行过程

问题描述 求解答:java小程序执行过程 package chap14; import java.util.*; interface Generator { T next(); } class Coffee { private static long counter = 0; private final long id = counter++; public String toString() { return getClass().getSimpleName() + " " + id

我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行

习惯了在IDE工具上进行代码编写,连最基本的Javac命令和Java命令都忘记的差不多了,今天对一个Java内部类进行编译和运行的时候,就出糗了.IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代码,点几下鼠标,程序就跑起来了,用起来相当方便.你不用去关心它后面做了些什么,执行了哪些命令,基于什么原理.然而也是这种过分的依赖往往让人散失了最基本的技能,当到了一个没有IDE的地方,你便觉得无从下手,给你个代码都不知道怎么去跑. 首先我在C盘上编写了一个InnerClassTest.java代码

云计算环境下数据中心管理运行探讨

编者按:管理是IT系统良性运行的重要保障,不同的IT设备都有自己的管理系统.特别是大规模数据中心,必须通过集中的管理系统来运行管理计算.存储.网络等设备,以能够快速响应和处理数据中心的业务变更.异常事件.持续优化.在<IP领航>往期的文章中曾多次聚焦"数据中心的管理",但大都侧重于"以网络为核心"的管理,本文将把视线放大到整个云计算环境下的数据中心,对三种运行管理模型逐一对比分析. 传统数据中心,基础架构层面设备之间通过标准化连接和协议互通,保证了计算.

[求救] JBuilder9.0环境下 编辑一个程序 实现 输出我的电脑上建立的FTP服务器目录下所有文件名

问题描述 就是先在本地开启了FTP服务在C:inetpubftproot文件夹里随便建立了几个文件,假设文件名是1,2,3,4现在用JAVA在JBuilder9下写一个程序输出结果是我的电脑上的这个FTP站点下的这个文件夹下所有文件的文件名,也就是输出:1,2,3,4我是小白,这对我来说很难,请高手大大指点,最好给个代码让我学习一下,谢谢了,很急的说. 解决方案 解决方案二:没有大虾在吗?

程序运行过程中动态改变控件大小的方法

程序|动态|过程|控件 在程序运行期间改变控件大小要用到WindowsAPI函数以下是主要的代码 [DllImport("user32.dll", EntryPoint="GetWindowLong")] public static extern int GetWindowLong ( int hwnd, int nIndex ); [DllImport("user32.dll", EntryPoint="SetWindowLong&q