博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python全栈学习--day33(网络编程-socket)
阅读量:4614 次
发布时间:2019-06-09

本文共 2782 字,大约阅读时间需要 9 分钟。

一.网络编程

说明:你现在已经学会了写python的代码,假如

你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢?

这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。

 

但是当你的a.py和b.py分别在不同的电脑上的时候,你要怎么办呢?

类似的机制有计算机网盘,qq等等。我们可以在我们的电脑上和别人聊天,可以在自己的电脑上向网盘中上传、下载内容。这些都是两个程序在通信。

 

二.软件开发的架构

我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:

第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用

第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用

这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~

1.C/S架构

C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。

这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。

2.B/S架构

B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。

Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。

 

三.网络基础

首先,程序必须要启动,其次,必须有这台机器的地址,我们都知道我们人的地址大概就是国家\省\市\区\街道\楼\门牌号这样字。那么每一台联网的机器在网络上也有自己的地址,它的地址是怎么表示的呢?

就是使用一串数字来表示的,例如:100.4.5.6

 

socket概念

socket层

什么是socket

socket是应用层与与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

其实站在开发的角度上看,socket就是一个模块。我们通过调用模块中已经实现的方法和建立两个进程之间的连接和通信。

也有人将socket说成ip+port,因为IP是用来表示互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序。

所以,我们只要确立了IP和port就能找到一个应用程序,并且使用socket模块来与之通信。

tcp协议和udp协议

TCP:可靠的,面向连接的协议(eg:打电话), 传输效率低全双工通信(发送缓存&接收缓存),面向字节流。使用TCP的应用:WEB浏览器;电子邮件、文件传输程序。

UDP:不可靠的、无连接程序、传输效率高。一对一、一对多、多对一、多对多、面向报文、尽最大努力服务、无拥塞控制。使用UDP的应用:域名系统(DNS);视频流;IP语音(voip).

四.套接字(socket)初使用

基于TCP协议的socket

tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端

server端

 

import socket# 基于tcp协议的一次通信sk = socket.socket()   # 买手机# sk.bind(('192.168.11.53',9999))    # 装一张电话卡sk.bind(('127.0.0.1',9999))    # 装一张电话卡# 8000 - 10000sk.listen()   # 开机conn,addr = sk.accept()   # 等着 接电话  我们两个的连接,对方的地址print(addr)conn.send('你好'.encode('utf-8'))ret = conn.recv(1024)   #1024  表示接受1024个字节print(ret.decode('utf-8'))conn.close()   # 挂电话sk.close()     # 关手机# 计算机的回环地址  127.0.0.1

  client端

import socketsk = socket.socket()   # 买个手机sk.connect(('127.0.0.1',9999))   # 打电话ret = sk.recv(1024)print(ret.decode('utf-8'))sk.send('你也好'.encode('utf-8'))sk.close()    # 关机

  

实例一:

在线客服聊天

###server端import socket# 基于tcp协议的一次通信sk = socket.socket()  sk.bind(('192.168.11.59',9999))    sk.listen()   # 监听conn,addr = sk.accept()   while True:    ret = conn.recv(1024)   #1024  表示服务器接受1024个字节    print(ret.decode('utf-8'))    message = input('>>>:')    conn.send(message.encode('utf-8'))    if message == 'q':        conn.close()   # 挂电话        sk.close()     # 关手机
#####client 端import socketsk = socket.socket()                #买手机sk.connect(('192.168.11.59',9999))      #打电话while True:    message = input('>>>:')    sk.send(message.encode('utf-8'))    ret = sk.recv(1024)    print(ret.decode('utf-8'))    if message == 'q':        sk.close()                         #关机

  

  

 

转载于:https://www.cnblogs.com/haowen980/p/8986096.html

你可能感兴趣的文章
DataSource数据库的使用
查看>>
CentOS开启samba实现文件共享
查看>>
MSSQL使用sqlbulkcopy批量插入数据
查看>>
证明一个数能被3整除,当且仅当它的各位数的和能被3整除
查看>>
2018秋寒假作业4—PTA编程总结1
查看>>
android自适应屏幕
查看>>
2019-北航面向对象-电梯作业总结
查看>>
SqlHelper
查看>>
初识算法、数据结构
查看>>
Luogu4069 SDOI2016 游戏 树链剖分、李超线段树
查看>>
Java的内部类真的那么难以理解?
查看>>
一文搞懂Java环境,轻松实现Hello World!
查看>>
hash实现锚点平滑滚动定位
查看>>
也谈智能手机游戏开发中的分辨率自适应问题
查看>>
【转】MYSQL数据库设计规范与原则
查看>>
《中国大历史》—— 读后总结
查看>>
回溯法算法框架
查看>>
残差学习【转载】
查看>>
0302 关于IT行业的就业感想
查看>>
3、流程语句相关练习
查看>>