原文网址:http://www.myexception.cn/program/1600316.html

一、关键词解释

客户端:能向服务器发送信息,提出请求。

服务器:能接收客户端发来的请求,并能发送数据给客户端以做出回应。

从这里可以看出,我们的电脑可以充当双重角色。

1、当我们用浏览器浏览网页,要查看某个文件时,我们的电脑会发出请求给文件服务器,文件服务器收到请求并同意后,将文件数据传送到我们的电脑。此时,电脑充当客户端的角色。

2、当电脑和打印机通信后,打印机发送打印请求,此时我们可以令电脑发出打印信息(打印内容,单/双页打印等等)给打印机,打印机就可以开始打印了。此时电脑充当服务器的角色。

二、疑问及其理解

客户端与服务器是怎样进行通信的?

以上面的电脑例子来说的话。

1、通信首先需要进行通信的实体

电脑&&文件服务器(可能是台功能强大的电脑),电脑&&打印机。

2、然后是通信的媒介

如上面例子中用到的电缆或光缆,当然也可能是介于某一频谱范围内的看不见的无线电波。

3、最关键的是通信协议

电脑要和打印机交流,必须要规定通信的规矩,即协议(电脑发送一段数据过去,也许就是一个符号'Y',但打印机需要明白这是要打印的意思,所以他们事先要规定好什么是什么的意思,才不会出现对牛弹琴的现象)。当然,协议可多了,远不止于这一点。信息从电脑发出到文件服务器,就进过了许多的协议。本来是一段文字,经过某种协议被转化成能在媒介中传递的电信号或电磁波等信号,这些信号要达到文件服务器那一端,中途可能会碰到一系列的节点(能接受信息并做出处理的系统,如路由器),节点会按照某种协议告诉这些信号该怎样走才能到达文件服务器,然后信号开始沿着该节点告诉他的方向继续传递(要知道互联网的线路可是比蜘蛛网复杂的多,没有中间一系列节点的帮助,要达到目的地可不容易啊!)。最好要到达目的地时,要按照协议将电信号或电磁波信号转换为文件服务器能识别的信息。意思大概就是这样,如果想知道具体什么协议的话,就需要查看相关文献了,重中之重莫过于TCP/IP协议了。

三、用socket套接字实现应用程序间的通信

1、应用程序作为服务器时,可以用以下代码实现:

ServerSocket server=new ServerSocket(int Port);

//server是创建的服务器对象,Port为该服务器占用的端口号,只有当服务器和客户端的端口号相同时才能连接成功。

在服务器端进行等待:

Socket socket2=server.accept();//服务器等待客户机的访问,程序运行到此处将被堵塞,即不向下继续执行,直到有客户机访问该服务器

2、应用程序作为客户端时,可以用如下代码来创建将与端口号一致的服务器相连的客户端:

Socket client=new Socket(String IP,int Port);

//client是创建的客户端对象,IP、Port分别是该客户端占用的IP号、端口号,此时服务器的socket2被声明成功,堵塞状态不复存在,程序继续向下执行

3、客户端和服务器连上后,需要进行他们之间的通信,怎么办呢?可以分别获取两个对象的输入、输出流对象,以进行读写操作。

获取客户端的输入、输出流对象:

InputStream is_client=socket.getInputStream();

//is_client是客户端socket的输入流对象

OutputStream os_client=socket.getOutputStream();

//os_client是客户端socket的输入流对象

同样的,可以获取服务器端的输入、输出流对象:

InputStream is_server=socket2.getInputStream();

//is_server是客户端socket的输入流对象

OutputStream os_server=socket2.getOutputStream();

//os_server是客户端socket的输入流对象

4、有了输入、输出流对象后,可以用读写操作进行服务器和客户端之间的通信了。

a、客户端写入信息,服务器获取信息:

is_client.write("hello#".getBytes());//客户端写入"hello”,'#'是信息结束的协议

StringBuffer sb=new StringBuffer();//sb是长度可动态变化的字符串对象,便于添加字符和字符串,用来保存下面服务器读到的信息

char c;//用于保存读到的单个字节

c=os_server.read();//将读到的一个字节存储到变量c中

while(c!='#'){//当读到的字符不是表示信息结束的'#'时,就一直读取下去

sb.append(c);//将读到的字符添加到sb中

c=os_server.read();//继续读取下一个字节

}

接下来,服务器就可以对保存在sb中的信息进行相应的处理

b、同理,服务器回应客户端的过程,也就是服务器写入信息(os_server.write()),客户端读取信息(is_client.read())的,只是将上面的输入、输出流对象变换一下

客户端和服务器之间通信讲解相关推荐

  1. 客户端与服务器之间通信收不到信息——readLine()

    写服务器端和客户端之间通信,结果一直读取不到信息,在https://blog.csdn.net/yiluxiangqian7715/article/details/50173573 上找到了原因:使用 ...

  2. 客户端和服务器之间的信息结构,客户端与服务器之间的通信过程

    客户端与服务器之间的通信过程 内容精选 换一换 一.HTTP概念超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必 ...

  3. 客户端与服务器之间的通信过程

    客户端与服务器之间的通信过程主要分为三步:请求--处理--响应 1.客户端发起请求 2.服务器处理本次请求 3.服务器响应客户端

  4. 客户端到服务器的通信过程

    客户端到服务器的通信过程 认识socket socket的英文原意为:孔.插座.当然作为进程通信机制,取插座的意思.通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄 ...

  5. GBASE 8s客户端与服务器的通信

    GBase客户端与服务器的通信支持多种不同的方式:共享内存 Shared memory.Stream pipe. TCP/IP(Sockets.TLI).IPX/SPX.DRDA.我们通常选择TCP/ ...

  6. 利用Socket 本地和服务器之间通信(小白萌新适用之绝对能运行版)

    Java利用Socket 实现本地和服务器之间通信(小白萌新适用之绝对能运行版) 常规部署 1.先在自己本地跑通 客户端: Socket s = new Socket("localhost& ...

  7. 服务器如何做中转进行端口映射,使服务器之间通信,然后访问目标网站(baidu.com)

    文章目录 服务器如何做中转进行端口映射,使服务器之间通信,然后访问目标网站(baidu.com) 问题缘由 所需环境 操作步骤 1. 目的服务器设置 2. 中间服务器设置 3. 修改客户端 总结 服务 ...

  8. 客户端和服务器之间的信息结构,客户端和服务器之间的信息结构

    客户端和服务器之间的信息结构 内容精选 换一换 说明:Web Service客户端和服务器间使用相同的编码方式,是为了防止出现乱码现象,也是实施输入校验的基础.安全加固:web server响应消息统 ...

  9. 使用sftp在客户端与服务器之间进行文件传输

    知识点:sftp 步骤: 一. 登录服务器 使用命令格式:sftp 服务器主机名 二. 在客户端与服务器之间进行文件传输 命令put: 上传到服务器 put haha.txt 命令get: 下载到客户 ...

最新文章

  1. mysql删除开放用户权限
  2. java 密码规则_密码规则(正则表达式)
  3. 漫画:如何给女朋友解释为什么200M宽带,打王者荣耀还是会有460的延迟?
  4. Java-重载、重写(冷静分析)
  5. 算法:求数的幂次方powx-n
  6. Java-数据结构-TreeMap
  7. 2022年各省高考查分时间、入口汇总
  8. 【算法】机器人走迷宫(适用于走迷宫、最短路径算法)-20200412
  9. python爬虫—爬取拉钩网
  10. html怎么跟微信公众号关联,微信视频号怎么关联公众号?一步一步教你!
  11. 网站建设运营SEO优化的几个技巧
  12. 2020第十一届蓝桥杯7月份省赛真题(JavaB组题解)
  13. php二码合一,PS4slim二码合一怎么看
  14. android APP开发时,全屏手机适配的问题解决
  15. 朴素贝叶斯代码实现python
  16. RSA加密解密算法的java实现
  17. Excel 2016新增图表攻略
  18. 软件安全测试有哪些方法?
  19. 固体微电子学与半导体物理学(四)
  20. PMP模拟试题与解析(八)

热门文章

  1. 【C++笔记三】- 英语相关/英语工具
  2. Android仿QQ,网易邮箱客户端收件人控件
  3. dynamo方程怎么写_Dynamo代码怎么写?BIM系列之dynamo代码块快速入门
  4. 基因课笔记3:从源代码安装samtools、fastqc的安装、环境变量和shell
  5. 如果你不尝试自己能力之外的事情,你永远不会成长。——拉尔夫‧爱默生
  6. 2010年的外挂小作品 - QQ对对碰单机版外挂
  7. 2019企鹅号自媒体阅读量怎么计算收益
  8. 树莓派C++开发机器人智能小车(15)嵌入式QT界面按钮事件
  9. FOR XMI PATH,STUFF 实现字段拼接
  10. 12 readdir 函数