0
点赞
收藏
分享

微信扫一扫

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、两机交互的原理

Python之网络编程(socket基础)_linux

Socket编程

1、socket编程的概念

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

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

socket在网络传输中的位置:

Python之网络编程(socket基础)_程序人生_02

2、socket的两种类型

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

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

3、socket的运行流程

Python之网络编程(socket基础)_网络_03


解释:

在传输层与应用层之间有一个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)

运行服务端:

Python之网络编程(socket基础)_程序人生_04


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

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

Python之网络编程(socket基础)_网络_05


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

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

Python之网络编程(socket基础)_经验分享_06


举报

相关推荐

0 条评论