Python之网络编程(socket基础)

网友投稿 266 2022-11-30

Python之网络编程(socket基础)

文章目录

​​客户端/服务器架构​​

​​1、即C/S架构​​​​2、C/S架构与socket的关系​​​​3、两机交互的原理​​

​​Socket编程​​

​​1、socket编程的概念​​​​2、socket的两种类型​​​​3、socket的运行流程​​​​4、socket = ip + port​​​​5、socket实现的交流​​

从本篇文章开始,就进入了Python与网络结合的相关内容了,也就是进入了服务端、客户端、线程等方面的编程。本篇主要介绍socket编程的基础、用socket实现简单的收发消息。

客户端/服务器架构

1、即C/S架构

客户端/服务器架构就是C/S架构,包括两种: (1)硬件C/S架构(打印机) (2)软件C/S架构(web服务)

2、C/S架构与socket的关系

学习socket就是为了完成C/S架构的开发

3、两机交互的原理

Socket编程

1、socket编程的概念

Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两个程序通信用的。)

套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行,Linux所提供的功能(如打印服 务,ftp等)通常都是通过套接字来进行通信的,套接字的创建和使用与管道是有区别的,因为套接字明确地将客户和服务器区分出来,套接字可以实现将多个客 户连接到一个服务器。

socket在网络传输中的位置:

2、socket的两种类型

它们都遵循两种协议: tcp协议和udp协议

流式Socket(STREAM): 是一种面向连接的Socekt,针对面向连接的TCP服务应用,安全,但是效率低数据报式Socket(DATAGAM): 是一种无连接的Socket,对应于无连接的UDP服务应用。不安全(易丢失,顺序混乱,在接受端要分析重排及要求重发),但效率高

3、socket的运行流程

解释:

在传输层与应用层之间有一个socket抽象层

我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循scoket的规定去编程,写出的程序自然就是遵循tcp/udp标准的程序

4、socket = ip + port

IP是用来表示互联网中一台主机的位置,而port是用来表示这台机器上的一个应用程序; IP地址是配置到网卡上的,而port是应用程序开启的; 所以IP与port的绑定就标识了互联网中独一无二的一个应用程序

5、socket实现的交流

服务端代码:

import socket #服务端导入socket模块phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #用socket实例化一个对象phone#AF_TNET代表是基于网络传输;SOCK_STREAM代表遵循tcp协议phone.bind(('192.168.43.247',8000)) #表明绑定一个端口,ip地址为本机ip地址phone.listen(5) #监听;5表示最大可以挂起5个链接,多余的会在后面排队print('-------->line1') #直接运行服务端会卡在这里等对方的链接conn,addr = phone.accept() #获取对方的链接和号码print('-------->line2')#收消息msg = conn.recv(1024) #接收对方的链接,接收1024字节的信息print('客户端发来的消息是:',msg)#发消息conn.send(msg.upper()) #把发来的消息以大写的方式返回给客户端#conn.send(msg) #把消息发送出去conn.close() #发送完了就关闭链接phone.close() #再关闭整个phone,即整个socker对象

客户端代码:

import socket #客户端也要导入socket模块phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #基于网络;遵循tcp协议phone.connect(('192.168.43.247',8000)) #接通服务端,接通的就是对方绑定的元组;这里使用的IP地址便为你自己电脑的IP地址#发消息phone.send('Hello'.encode('utf-8')) #网络传输是二进制形式,所以要编码成二进制进行传输#127.0.0.1#conn,addr = phone.accept()#客户端不需要再获取对方的链接和号码#收消息msg = phone.recv(1024) #直接用phone.recv来接收消息print('服务端传回来的消息是:',msg)

运行服务端:

可以看到光标在跳动,等待客户端发送的消息…

所以我们接下运行客户端:

发现服务端成功接收到了消息…

同时客户端也接收到了服务端加工过的消息:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring启动过程源码分析及简介
下一篇:常量设计
相关文章

 发表评论

暂时没有评论,来抢沙发吧~