Python 提供了两个级别访问的网络服务。:
- 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
- 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
语法格式如下: -
socket.socket([family[, type[, proto]]])
socketserver
import socket import threading serversocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serversocket.bind(("127.0.0.111",9999))#绑定服务器和端口号 print("服务器已等待") serversocket.listen(2)#最多同时接受5个 print("最多同时连接2个客户") c=serversocket.accept()#接受客户端的连接 c是元组 表示得到客户端的端口 print(c) def myrerv(c): while True: massge = c[0].recv(1024)#接受消息 print(massge.decode()) threading._start_new_thread(myrerv,(c,)) def myinput(): while True: massge=input() c[0].send(massge.encode()) threading._start_new_thread(myinput())
socketserver多线程
import socket import threading serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) serversocket.bind(("127.0.0.11",9999))#绑定服务地址和端口号 print("服务器已等待") serversocket.listen(5)#最多同时接收5个 massge=None#定义一个全局变量,用来存储聊天信息 临时存储 lock= threading.Lock() mythread=threading.Condition(lock) def server_recv(c,a): global massge while True: mystr=c.recv(1024) mythread.acquire() massge=str(a)+mystr.decode() print(massge) mythread.notift_all() mythread.release() def server_send(c,a): global massge while True: mythread.acquire() mythread.wait() mythread.release() c.send(massge.encode()) print(massge) while True: c,a=serversocket.accept() threading._start_new_thread(server_recv,(c,a)) threading._start_new_thread(server_send,(c,a))
socketclient
import socket import threading client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect(("127.16.0.114",9999)) print("客户端已连接") def myrerv(c): while True: massge = c.recv(1024)#接收消息 print(massge.decode()) threading._start_new_thread(myrerv,(client,)) def myinput(): while True: massge=input() client.send(massge.encode()) threading._start_new_thread(myinput())