一.socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
file模块是针对某个指定文件进行【打开】【读写】【关闭】
socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
a.软件
客户端: CS架构, client -> server
浏览器: BS架构, browser -> server
b.总结:
1.相互通信本质发送010101100
2.交换机的作用
3.通过ipconfig查看自己的内网ip
4.公网ip 自费
c.基于socket模块实现网络通信
网络通信发送的是字节,而不是字符串
send/ recv都是字节
服务端:
accept, 阻塞: 等待客户端来连接.
recv, 阻塞: 等待客户端发来数据.
客户端:
connect, 阻塞: 一直在连接,直到连接成功才往下运行其他代码.
recv, 阻塞: 等待服务端发来数据.
import socket #创建服务端socket对象 server = socket.socket() #绑定ip和短口 server.bind(("192.168.13.166",8001)) #后便可以等5个人 server.listen(5) while True: print("服务端准备开始接受客户端的连接") #等待客户端来连接,如果没人来就一直的等待. #conn是客户端和服务端连接的对象,服务端以后要通过该对象进行首发数据. #addr是客户端的地址信息 conn,addr = server.accept() print("已经有人连接上了,客户端信息:",conn,addr) #1024表示:服务端通过获取数据时,一次性最多拿1024字节. while True: data = conn.recv(1024) print("已经有人发来消息了",data) #服务端通过连接对象给客户端回复了一个消息. if data == b'exit': break response = data + b"sb" conn.send(response) #与客户端断开链接 conn.close() #关闭服务端的服务 server.close()
import socket client = socket.socket() #向服务端发起连接请求 #阻塞,去连接,知道连接成功后才会继续向下走 client.connect(("192.168.13.166",8001)) while True: #连接上服务端后,向服务端发送消息 # client.send(b'hello') name = input("请输入姓名:") client.send(name.encode("utf-8"))#字节 if name =="exit": break #等待服务端的消息 data = client.recv(1024) print(data.decode("utf-8")) #关闭自己 client.close()