用Java Socket开发支持上千个并发的小型服务器(上)

Java Socket

套接字(socket)为两台计算机之间的通信提供了一种机制,在JamesGosling注意到Java语言之前,套接字就早已赫赫有名。该语言只是让您不必了解底层操作系统的细节就能有效地使用套接字。

1客户机/服务器模型

在饭店里,菜单上各种具有异国情调的食品映入你的眼帘,于是你要了一份pizza。几分钟后,你用力咀嚼浇着融化的乳酪和其他你喜欢的配料的热pizza。你不知道,也不想知道:侍者从那里弄来了pizza,在制作过程中加进了什么,以及配料是如何获得的。

上例中包含的实体有:美味的pizza、接受你定餐的侍者、制作pizza的厨房,当然还有你。你是定pizza的顾客或客户。制作pizza的过程对于你而言是被封装的。你的请求在厨房中被处理,pizza制作完成后,由侍者端给你。

你所看到的就是一个客户机/服务器模型。客户机向服务器发送一个请求或命令。服务器处理客户机的请求。客户机和服务器之间的通讯是客户机/服务器模型中的一个重要组成部分,通常通过网络进行。

客户机/服务器模型是一个应用程序开发框架,该框架是为了将数据的表示与其内部的处理和存储分离开来而设计的。客户机请求服务,服务器为这些请求服务。请求通过网络从客户机传递到服务器。服务器所进行的处理对客户机而言是隐藏的。一个服务器可以为多台客户机服务。

多台客户机访问服务器

服务器和客户机不一定是硬件组件。它们可以是工作啊同一机器或不同机器上的程序。、

考虑一个航空定票系统中的数据输入程序:数据----乘客名、航班号、飞行日期、目的地等可以被输入到前端----客户机的应用程序中。一旦数据输入之后,客户机将数据发送到后端----服务器端。服务器处理数据并在数据库中保存数据。客户机/服务器模型的重要性在于所有的数据都存放在同一地点。客户机从不同的地方访问同一数据源,服务器对所有的输入数据应用同样的检验规则。

万维网为‘为什么要将数据的表示与其存储、处理分离开来’提供了一个很好的例子。在Web上,你无需控制最终用户用来访问你数据的平台和软件。你可以考虑编写出适用与每一种潜在的目标平台的应用程序。

‘客户机/服务器应用程序的服务器部分’管理通过多个客户机访问服务器的、多个用户共享的资源。表明‘客户机/服务器程序的服务器部分’强大功能的最好例子应该是Web服务器,它通过Internet将HTML页传递给不同的Web用户。

Java编程语言中最基本的特点是在Java中创建的程序的代码的可移植性。因为具有其他语言所不具备的代码可移植性,Java允许用户只要编写一次应用程序,就可以在任何客户机系统上发布它,并可以让客户机系统解释该程序。这意味着:你只要写一次代码,就能使其在任何平台上运行。

2协议

当你同朋友交谈时,你们遵循一些暗含的规则(或协议)。例如:你们俩不能同时开始说话,或连续不间断地说话。如果你们这样作的话,谁也不能理解对方所说的东西。当你说话时,你的朋友倾听,反之亦然。你们以双方都能理解的语言和速度进行对话。

当计算机之间进行通讯的时候,也需要遵循一定的规则。数据以包的形式从一台机器发送到另一台。这些规则管理数据打包、数据传输速度和重新数据将其恢复成原始形式。这些规则被称为网络协议。网络协议是通过网络进行通讯的系统所遵循的一系列规则和惯例。连网软件通常实现有高低层次之分的多层协议。网络协议的例子有:TCP/IP、UDP、AppleTalk和NetBEUI。

Java提供了一个丰富的、支持网络的类库,这些类使得应用程序能方便地访问网络资源。Java提供了两种通讯工具。它们是:使用用户报文协议(UDP)的报文和使用传输控制协议/因特网协议(TCP/IP)的Sockets(套接字)。

数据报包是一个字节数组从一个程序(发送程序)传送到另一个(接受程序)。由于数据报遵守UDP,不保证发出的数据包必须到达目的地。数据报并不是可信赖的。因此,仅当传送少量数据时才使用,而且发送者和接受者之间的距离间隔不大,假如是网络交通高峰,或接受程序正处理来自其他程序的多个请求,就有机会出现数据报包的丢失。

Sockets套接字用TCP来进行通讯。套接字模型同其他模型相比,优越性在于其不受客户请求来自何处的影响。只要客户机遵循TCP/IP协议,服务器就会对它的请求提供服务。这意味着客户机可以是任何类型的计算机。客户机不再局限为UNIX、Windows、DOS或Macintosh平台,因此,网上所有遵循TCP/IP协议的计算机可以通过套接字互相通讯。

时间: 2024-08-04 12:28:33

用Java Socket开发支持上千个并发的小型服务器(上)的相关文章

用Java Socket开发支持上千个并发的小型服务器(下)

总结一下客户机 我们的类研究完了.在我们继续往前讨论服务器端的情况之前,让我们回顾一下创建和使用Socket的步骤: 1.用您想连接的机器的IP地址和端口实例化Socket(如有问题则抛出Exception). 2.获取Socket上的流以进行读写. 3.把流包装进BufferedReader/PrintWriter的实例,如果这样做能使事情更简单的话. 4.对Socket进行读写. 5.关闭打开的流. 5创建服务器Socket 创建RemoteFileServer类 1.import java

java socket 开发,请高手指点,谢谢。

问题描述 java socket 开发,请高手指点,谢谢. 1.需要实现跟服务器进行客户数据的同步! 2.报文编码:GBK 3.请求报文格式: [192.168.1.189][01][张三][18651870425][重庆][xxxxx].... 这些是我需要传过去的参数 4.返回报文格式 [10054][01][张三][18651870425][重庆][重庆市江湖区...]. 我在网上看了很多socket 列子,都是: Socket client = new Socket("127.0.0.1

问个应该不难的问题:文件能不能上传到另一台服务器上??

问题描述 请高手指点一个问题:最近公司在写套系统,需要上传文件,因为文件比较大,而且多个分公司都要使用,所以想代码放在一台共用的服务器上(比较方便修改更新),而上传的文件,每个分公司一台服务器,上传的文件分别放在自己的服务器上.(通过登录账号可以判断出是那个分公司的人在用.)这样的效果能否实现? 解决方案 解决方案二:既然多个分公司都要使用,那么为什么不把文件都放到同一个服务器上,每个分公司一个文件夹,而要分别放到多个服务器上?非要这么做也不是不可以,不过你要保证每个分公司的服务器互相都能访问,

java如何上传的图片保存到文件服务器上

问题描述 程序部署在web服务器上,我们要将上传的图片保存到另外一台文件服务器上,请问如何实现? 解决方案 解决方案二:该回复于2011-05-05 13:53:32被版主删除解决方案三:用程序读取上传时的文件路径把路径存在数据库中这样的话有路径就有图片了你再想想不知是不是这个意思解决方案四:最好不要保存在服务器上如果东西太大或累积会造成服务器缓慢或者其他...解决方案五:不是的,现在我们有两台服务器,一台在电信托管的web程序服务器,一台是在公司内部的一台专门的图片服务器,现在需要在进行上传操

java播放器-嵌入windowsplayer播放器怎么播放放在服务器上的音乐文件

问题描述 嵌入windowsplayer播放器怎么播放放在服务器上的音乐文件 就是用这个读取windowsplayer的播放器的注册表,现在要达到的一个功能是要播放服务器上的音乐文件,音乐文件是放在服务器的本地上的

从上千篇投稿脱颖而出,这5篇大数据论文凭什么征服KDD评委?

5月23日消息,在2017国际知识发现与数据挖掘大会(KDD)全球论文投稿中,阿里集团和蚂蚁金服共有5篇论文被大会收录,这是继年初阿里云获得KDD Cup 2017举办权之后,阿里巴巴在国际数据挖掘顶会KDD学术成果上的又一次突破. 图 KDD 2017 官网图片 KDD的英文全称是Knowledge Discovery and Data Mining,即知识发现与数据挖掘,由美国计算机协会ACM下的数据挖掘分会举办,是国际数据挖掘领域的顶级会议,每年有大量来自世界各地的学术界和工业界人士参与此

JAVA技术实现上传下载文件到FTP服务器(完整)_java

具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

Java通过FTP服务器上传下载文件的方法_java

对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

软件-关于android,如何实现在手机客户端中获取服务器上的资源,文件。【谢谢】

问题描述 关于android,如何实现在手机客户端中获取服务器上的资源,文件.[谢谢] 就比如说我手机上一个软件,怎么进入服务器上下载文件呢?,...感激不尽 解决方案 用httpclient这个类. 解决方案二: 1.如果只是文件的话,可以在服务器上开一个FTP服务.一般的,可以在服务器上开WEB服务 2.如果用WEB的话,需要在服务器上开发服务器端程序. 3.手机上用相应的客户端连接服务器(例如HttpClient),发出命令并接受数据. 解决方案三: 一:基于Http协议获取数据方法.二: