python_socket (套接字)

时间:2023-03-10 06:38:53
python_socket (套接字)

socket是计算机网络通信的基本的技术之一。如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的。

网络上两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,应用程序通过socket向网络中发出消息,或者接收消息。

socket是应用层与TCP/IP协议族的中间抽象层,它是一组接口,把复杂的TCP/IP协议族封装为几个简单的接口提供给应用层调用,实现程序在网络中的通信

socket仅仅是一个调用接口,为了方便程序员针对TCP或者UDP编程的接口。

python_socket (套接字)

socket的七个方法

python_socket (套接字)  服务端套接字绑定IP端口:bind()

python_socket (套接字)  客户端套接字连接服务器:connect()

python_socket (套接字)  服务端套接字监听:listen()

python_socket (套接字)  套接字发送消息:send()

python_socket (套接字)  服务端监听套接字同意连接:accept()

python_socket (套接字)  套接字接受消息:recv()

python_socket (套接字)  套接字关闭连接:close()

创建socket

python_socket (套接字) 导入socket模块: import socket

python_socket (套接字) 创建socket对象:socket.socket()

python_socket (套接字)

基本使用

python_socket (套接字)

注意: 服务端是通过accept生成的对等连接套接字来和客户端通信的

注意: aeecpt和recv是会阻塞的,当没有数据来的时候阻塞等数据过来

xshell 中命令执行

python_socket (套接字)

代码执行:

写一个不断接受(while True)用户连接的服务端,它的作用是把客户端发来的数据原封不动的返回。

#服务端Linux\window系统下:处理命令并返回
import socket #声明类型,生成socket链接对象
server = socket.socket() #监听接收端口元组(本地,端口),绑定要监听的端口
server.bind(('127.0.0.1', 8888)) #1.监听
#2.“5”最大监听数,允许多少人在排队
server.listen(5) print("执行到这, 上面没问题了") #循环锁定访问客户端
while True: #1.等待客户端 #会返回链接的标记位conn,与连接的地址
#2.客户端同过conn,addr进行通话
#3.conn就是客户端连接过来而在服务器端为其生成的一个连接实例
conn, addr = server.accept() #查看标记位与IP地址
print(conn, addr) #循环处理客户端请求
while True: #1.接收数据,1024字节
#2.如果发不完会存在缓冲去,下次在发送。
#3.缓冲区每次最多发32768字节
#4.每个系统不同,超出数值会有限制。
data = conn.recv(1024) #返回
print(data) #判断是否为空。
if not data:
break #输入一个值,与客户端通讯
aa = input("--->>:") #解决报错:TypeError: a bytes-like object is required, not 'str'
bb = aa.encode() # 传输
conn.send(bb) #关闭链接
server.close()

写一个客户端来测试上面的服务端

#客户端Linux、window系统下:输入命令通过服务端返回
import socket #声明协议类型,同时生成socket连接对象
client = socket.socket() #链接地址和端口,元组(本地,端口)
client.connect(('127.0.0.1', 8888)) #使用input循环向服务端发送请求
while True: msg = input("-->>:").strip()
if len(msg) == 0:
continue #发送数据 b将字符串转为bys类型
client.send(msg.encode("utf-8")) #接收服务器端的返回,需要声明收多少,默认1024字节
id = 1024
data = client.recv(id) #打印data是recv的data
print("recv: %s" % data) #关闭接口
client.close()

作者:含笑半步颠√

博客链接:https://www.cnblogs.com/lixy-88428977

声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。