加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从TCP到Socket,彻底领略收集编程是怎么回事

发布时间:2019-02-20 11:53:20 所属栏目:教程 来源:itworld123
导读:举办措施开拓的同窗,无论Web前端开拓、Web后端开拓,照旧搜刮引擎和大数据,险些全部的开拓规模城市涉及到收集编程。好比我们举办Web处事端开拓,除了Web协议自己依靠收集外,凡是还必要毗连数据库,而数据库毗连凡是是通过收集毗连数据库处事器,可能数
副问题[/!--empirenews.page--]

举办措施开拓的同窗,无论Web前端开拓、Web后端开拓,照旧搜刮引擎和大数据,险些全部的开拓规模城市涉及到收集编程。好比我们举办Web处事端开拓,除了Web协议自己依靠收集外,凡是还必要毗连数据库,而数据库毗连凡是是通过收集毗连数据库处事器,可能数据库集群,假如负载太高还要搞个缓存集群。

从TCP到Socket,彻底领略收集编程是怎么回事

我们在上学的时辰根基学了收集编程和收集协议。但两者之间的详细相关也许有些摸不到脑子。这里我们起首重点先容2个观念,一个观念是收集编程,其它一个是协议。

我们知道收集协议是一个分层的协议族,也就是是有一组协议组成,从下往上各自认真各自的成果。那什么是协议呢?协议的字面意思是配合计议,商量。简朴的领略着实就是多方举办雷同的划定。而收集协议着实就是在收集中多个计较节点举办交互、雷同的划定。假如根我们一般糊口比拟的话,协议可以领略为说话,好比汉语平凡话。两小我私人交换假如都用不通话,那么互相都能领略对方表达的意图。譬喻,一小我私人用四川话,而其它一个用浙江话,那雷同起来预计险些不太也许。收集协议也是一样的,通过对数据名目标类型化,从而使计较机之间可以或许互相明晰对方的意图。

下面本文先容一下收集编程,收集编程也称为socket编程,socket凡是译作“套接字”,但原意着实意译应该为”接口“。也就是操纵体系提供应开拓职员举办收集开拓的API接口。这套接口凡是可以参数的调解支持多种协议,包罗TCP、UDP和IP等等。下面本文从套接字编程和协议两方面别离具体的举办先容。

收集编程

为了便于领略,本文先从详细的内容开始,也就是通过一个实例先容一下收集编程是怎么回事。

本文将以TCP协议为例先容收集编程和协议之前的相关。为了简朴,便于领略,本文以Python为例举办先容,假如不相识Python编程说话相关也不大,下面代码很轻易领略。我们知道在收集通讯中无论是BS架构照旧CS架构,凡是分为处事端和客户端,只不外BS架构中的赏识器就是客户端。因此,本文的示例也包括处事端和客户端2部门的代码。代码成果很简朴,就是实现客户端和处事端发送字符串。

图1 客户端处事端通讯模子

这个代码清单是处事端的代码,这段代码的浸染就是在处事端的某个端口成立监听,并守候客户端成立毗连。完成毗连成立后,守候客户端发送数据,并将数据回传给客户端。

  1. #!/usr/bin/env python3 
  2. #-*- coding:utf-8 -*- 
  3. from socket import * 
  4. from time import ctime 
  5. host = '' 
  6. port = 12345 
  7. buffsize = 2048 
  8. ADDR = (host,port) 
  9. # 建设一个基于TCP协议的套接字 
  10. tctime = socket(AF_INET,SOCK_STREAM) 
  11. tctime.bind(ADDR) 
  12. # 在指定的地点和端口监听 
  13. tctime.listen(3) 
  14. while True: 
  15.  print('Wait for connection ...') 
  16.  tctimeClient,addr = tctime.accept() 
  17.  print("Connection from :",addr) 
  18.  while True: 
  19.  data = tctimeClient.recv(buffsize).decode() 
  20.  if not data: 
  21.  break 
  22.  tctimeClient.send(('[%s] %s' % (ctime(),data)).encode()) 
  23.  tctimeClient.close() 
  24. tctimeClient.close() 

阅读处事端的代码可以看出首要包罗,socket、bind、listen、accept、recv和send几个。个中值得存眷的是listen和accept,两者别离用于监听端口和接管客户端的毗连哀求。

下面代码清单是客户端的实现,这里出格的处所是有一个connect函数,该函数实现与处事端成立毗连。

  1. #!/usr/bin/env python3 
  2. #-*- coding:utf-8 -*- 
  3. from socket import * 
  4. HOST ='localhost' 
  5. PORT = 12345 
  6. BUFFSIZE=2048 
  7. ADDR = (HOST,PORT) 
  8. tctimeClient = socket(AF_INET,SOCK_STREAM) 
  9. tctimeClient.connect(ADDR) 
  10. while True: 
  11.  data = input(">") 
  12.  if not data: 
  13.  break 
  14.  tctimeClient.send(data.encode()) 
  15.  data = tctimeClient.recv(BUFFSIZE).decode() 
  16.  if not data: 
  17.  break 
  18.  print(data) 
  19. tctimeClient.close() 

通过上述示例代码可以看出处事端凡是是被动的,而客户端则要主动一些。处事端措施成立对某个端口的监听,守候客户端的毗连哀求。客户端向处事端发送毗连哀求,不出不测的环境下毗连成立乐成,这时客户端和处事端之前就可以互发数据了。虽然,在现实出产情形中不测是常常的,因此从协媾和接口层面,必要处理赏罚各类不测,本文在协议部门将具体先容。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读