`
约巴拿
  • 浏览: 19034 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

对客户端和服务器端通信的理解

阅读更多

对客户端和服务器端通信的理解

一、关键词解释

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

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

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

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())的,只是将上面的输入、输出流对象变换一下

 

 

 

 

分享到:
评论

相关推荐

    C++实现TCP客户端与服务器端数据通信

    基础的例子,适合新手学习理解TCP网络通信的过程

    服务器和客户端通信.docx

    2 实验内容 基于TCP/IP的通信基本上都是利用SOCKET套接字进行数据通讯,程序一般分为服务器端和用户端两部分。设计思路(VC6.0下): 第一部分 服务器端 一、创建服务器套接字(create)。 二、服务器套接字进行...

    Python socket网络编程TCP/IP服务器与客户端通信

    初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好看到了这部分网络...

    数字证书+tomcat

    单向认证:客户端向服务器发送消息,服务器接到消息后,用服务器端的密钥库中的私钥对数据进行加密,然后把加密后的数据和服务器端的公钥一起发送到 客户端,客户端用服务器发送来的公钥对数据解密,然后在用传到...

    一个服务器对多个客户端的MFC Socket编程示例(实现简单的即时通讯功能)

    思想与Java中的编程思想一样,只不过Java中会使用多线程技术,在Vector集合保存客户端的socket对象,而MFC框架提供了CSocket类,它是一个异步通信的类,所以看上去代码比较Java的多线程代码简单的实现了一个对多的...

    C#_UDP_Socket_P2P_通信客户端.zip

    C#,基于UDP的Socket通信客户端,包含服务器端和客户端,有图形化界面,通过服务器IP连接,点对点通信,不支持一对多,功能上属于很简单的,演示和理解基于UDP的Socket通信原理有一定的帮助。

    C#_异步TCP_IP_Socket_P2P_通信客户端.zip

    C#,基于TCP/IP的Socket通信客户端,包含服务器端和客户端,有图形化界面,通过服务器IP连接,是异步通信,非同步通信,点对点通信,不支持一对多,功能上属于很简单的,演示和理解基于TCP/IP的Socket通信原理有一定...

    java socket通信 一对多

    1)设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 2)服务端程序能响应单个或任意多个客户端...

    【基于MFC的Socket编程】基于TCP协议服务器客户端通信程序_实验报告

    3.3.2服务器端程序设计 17 3.4数流图 22 3.5关键的数据结构 22 3.5.1 TCP套接字数据结构 22 3.5.2 TCP的控制缓冲区 23 3.5.3 TCP套接字数据结构 24 四、设计成果 24 4.1设计实现的功能 24 4.2运行界面 25 4.3测试...

    网络socket套接字编程服务器客户端程序

    网络socket套接字编程服务器客户端程序 精心写好的socket通信程序,实现服务器同时接受多个连接! 效果类似于ftp登录时的欢迎信息 使用正确的用户和密码登录后...编译后先运行服务器端,然后运行客户端,端口号是9999

    网络编程课程设计报告-Android-Socket-聊天室.doc

    (3)与服务器端进行通信 (4)关闭套接字 四、系统流程图 五、系统设计 本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端, 每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个...

    JavaScriptDOM高级程序设计

    第二部分“浏览器外部通信”,以Ajax 和客户端—服务器端通信为主题;第三部分“部分高级脚本编程资源”,集中介绍了一批第三方脚本编程资源,包括库和A 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版(详细书签版:每章的小节)

    第二部分“浏览器外部通信”,以Ajax 和客户端—服务器端通信为主题;第三部分“部分高级脚本编程资源”,集中介绍了一批第三方脚本编程资源,包括库和API。同时,每部分的最后一章都为案例研究,将学到的内容应用于...

    JavaScript DOM 高级程序设计

    第二部分“浏览器外部通信”,以Ajax和客户端—服务器端通信为主题;第三部分“部分高级脚本编程资源”,集中介绍了一批第三方脚本编程资源,包括库和API。同时,每部分的最后一章都为案例研究,将学到的内容应用于...

    JavaScript.DOM高级程序设计

    第二部分“浏览器外部通信”,以Ajax 和客户端—服务器端通信为主题;第三部分“部分高级脚本编程资源”,集中介绍了一批第三方脚本编程资源,包括库和API。同时,每部分的最后一章都为案例研究,将学到的内容应用于...

    [JavaScript.DOM高级程序设计]

    第二部分“浏览器外部通信”,以Ajax 和客户端—服务器端通信为主题;第三部分“部分高级脚本编程资源”,集中介绍了一批第三方脚本编程资源,包括库和API。同时,每部分的最后一章都为案例研究,将学到的内容应用于...

    JAVA网络通信系统的研究与开发(论文+源代码+开题报告).rar

    源代码部分则提供了一个完整的Java网络通信示例,包括客户端和服务器端的代码,展示了如何利用Java进行高效的网络数据传输,并可能包括多线程处理、异常处理和安全措施等高级功能。开题报告则为项目的启动提供了详细...

    局域网聊天带源码ppt文档.zip

    本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端。 服务器端功能:建造一个局域网聊天室名为CNetChatServerApp,实现对话框,用于显示用户数量,还可以更改用户数量,通知客户端刷新用户名单。...

    VC版简单的聊天程序

    简单的聊天室程序,采用客户/服务器模式,分为客户端程序和服务器端程序。由于服务器只能支持一个客户,实际上是一个点对点通信的程序。客户端程序和服务器程序通过网络交换聊天字符串内容,并在窗口的列表框中显示...

Global site tag (gtag.js) - Google Analytics