客户机和服务器是怎样建立通信连接的

客户机和服务器的通信过程较为复杂,但要搞清楚其中的原理,很多问题也就能够迎刃而解。在讲述客户机和服务器通信原理之前,需要引入一个非常重要的概念就是Socket。Socket这一英文单词在英语中有“插座”的含义,那么它作为一种通信机制,可用于对IP地址和端口进行描述。Socket可接收和发送数据。服务器的全部工作就是等候建立一个连接,然后用那个连接产生的Socket 创建一个InputStream 以及一个OutputStream。开始连接之后,从InputStream 读入的所有东西都会反馈给OutputStream,直到接收到行END为止,最终关闭连接。

在客户机连接与服务器连接之后创建一个OutputStream。在这时就可以发送一个文本文件。客户机在这时可创建一个InputStream,从而开始对服务器的数据进行接收。

服务器与客户机可以使用同样的端口号,同时客户机利用本地主机地址连接位于同一台机器中的服务这个例子将以最简单的方式运用套接字对服务器和客户机进行操作。服务器的任务就是在建立连接,然后用那个连接产生的Socket 创建一个InputStream 以及一个OutputStream。然后,它从InputStream 读入的所有东西都会反馈给OutputStream,直到接收到行中止(END)为止,最终将连接关闭。

以上的通信方式可以理解为两个母语相同的人在通话,但是现在假如通信中的一个人是外国人(说英语),一个人是中国人(说普通话),在通话的过程中,都不能听明白对方说的是什么,那么他们的沟通就不能够完成。但是如果我们给一个规定,给通话双方,只能讲普通话,那么双方沟通就没有障碍了。于是通信协议的概念就产生了。

当客户机利用本地主机地址连接位于同一台机器中的服务accept()时,方法会暂时陷入停顿状态(堵塞),直到某个客户尝试同它建立连接。换句话说,虽然在等候连接的时候,其他进程仍能正常运行。在创建好一个连接之后,accept()可返回Socket对象。尚学堂陈老师指出,如果ServerSocket 构建器失败,程序在这时会退出,在ServerSocket 的构建器在失败之后不会留下任何打开的网络套接字。在这时main()会抛出一个IOException 违例。如果ServerSocket 构建器成功执行,则其他所有方法调用都必须到一个try-finally 代码块里寻求保护。

通过以上客户机和服务器的基本通信流程可以看出, Socket一般应用模式的作用是,服务器端:至少两个socket,一方面接收客户端发来连接请求,并不负责与客户端通信,另一方面,每当服务器端成功接收到客户端时,在服务器端创建一个与请求的客户端进行通信的socket。在客户端方面,通过创建一个socket对象对TCP连接初始化。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180322A0S7MT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券