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()
发布了9 篇原创文章 · 获赞 0 · 访问量 281

猜你喜欢

转载自blog.csdn.net/u013465115/article/details/104372459