python学习之Socket编程初识
在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
首先需要了解OSI模型,OSI模型共有七层:
应用层:一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类。
表示层:主要是进行对接收的数据进行解决、加密与解密、压缩与解压缩。
会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。
传输层:定义了一些传输数据的协议和端口号,如:TCP
网络层:主要将从下层接收到的数据进行IP地址的封闭与解封装。
数据链路层:主要将从物理层接收的数据进行MAC地址的封装与解封装。
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
网络通信要素:
IP地址
用来标识网络上一台独立的主机
IP地址=网络地址+主机地址(网络号:用于识别主机所在的网络/网段。主机号:用于识别该网络中的主机)
特殊的IP地址:127.0.0.1(本地回环地址、保留地址,点分十进制)可用于简单的测试网卡是否故障,表示本机。
端口号:
用于标识进程的逻辑地址。不同的进程都有不同的端口标识。
端口:要将数据发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,则将这些数字称为端口。
传输协议:通讯的规则。例如:TCP、UDP协议(好比两个人得用同一种语言进行交流)
UDP:User Datagram Protocol用户数据报协议
特点:
面向无连接:传输数据之前源端口和目的端不需要建立连接。
每个数据报的大小都限制在64k(8个字节)以内。
面向报文的不可靠协议。(即:发送出去的数据不一定会接收得到)
传输速率快,效率高。
TCP:Transmission Control Protocol传输控制协议
特点:面向连接:传输数据之前需要建立连接。
在连接过程中进行大量数据传输。
通过“三次握手”的方式完成连接,是安全可靠协议。
传输速度慢,效率低。
Socket通信流程
1服务器根据地址类型(ipv4、ipv6)、socket类型、协议创建socket
2服务器为socket绑定ip地址和端口号
3服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开
4客户端创建socket
5客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket
6服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞状态即accept()方法一直等到客户端返回连接信息才返回,开始接收下一个客户端连接请求
7客户端连接成功,向服务器发送连接状态信息
8服务端accept方法返回,连接成功
9客户端向socket写入信息(或服务端向socket写入信息)
10服务器读取信息(客户端读取信息)
11客户端关闭
12服务端关闭
如下代码:
Socket服务端 import socket #创建socket对象 sk=socket.socket() #绑定ip地址与端口号 sk.bind((“127.0.01”,”13000”))#使用元组进行传参 #监听,有没有请求过来 sk.listen() print(“服务端已经启动了”) #等待传入连接,在连接成功之前,保持阻塞状态 #连接成功之后,会返回一个新的套接字和客户端的ip地址和端口号 sonn,addr=Sk.accept() print(“客户端的ip地址是:”,addr) #接受数据 data=conn.recv() print(“客户端:”,data) server_input=input(“请输入>>>”) #发送数据 conn.sendall(server_input) #关闭连接 conn.close() sk.close() Socket客户端 import socket sk=socket.socket() sk.connect((“127.0.0.1”,13000)) client_input=input(“请输入>>>>”) sk.sendall(client_input.encode(“utf8”)) data=sk.recv(1024) print(“服务端:”,data.decode(“utf8”)) sk.close()
- 点赞
- 收藏
- 分享
- 文章举报
- python 网络编程学习: 1 初识 SOCKET
- Python的学习(三十) ---- socket编程
- 编程学习第二天,初识Python
- python 网络编程基础学习笔记(1)-网络客户端-socket
- python学习笔记七 初识socket(进阶篇)
- python基础学习19----socket网络编程
- python第七天学习记录——面向对象高级以及socket编程
- python学习笔记 - 初识socket
- Python 学习之socket编程
- python 网络编程学习: 2 SOCKET - cacique - 博客园
- 【python学习】socket编程
- python socket编程学习笔记2
- python开发学习-day07(面向对象之多态、类的方法、反射、新式类and旧式类、socket编程)
- python学习之socket编程
- Python学习之网络编程Socket
- Python学习笔记:网络编程(socket)
- Python学习笔记(4)-- 网络编程(1)-- socket
- python 学习笔记之socket编程——简单的聊天器雏形(server端)
- python -- socket 编程学习
- Python3之Socket编程学习笔记