Python 提供了两个级别访问的网络服务。:
1.低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
2.高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
套接字的创建语法
socket.socket([family[, type[, proto]]])
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默认为0.
我用低级别的网络服务做了一个python的局域网的聊天,只是控制台的简单聊天,还要升级为一个GUI的聊天
首先,我们聊天就需要一个服务器,有服务器就能聊天,称为服务套接字
import socket
import threading
#创建服务套接字
ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("建立服务套接字")
ss.bind(("0.0.0.0",8888))#服务套接字绑定端口号,绑定主机
#ss.bind(("0.0.0.0"(localhost是本机)是广域网,也可用作局域网,端口,避免与本电脑其他端口相同))
print("绑定端口和主机")
ss.listen(5)#控制聊天人数
#接受客户套接字
print("开始等待客户的请求")
c = ss.accept()#线程阻塞
print("某个客户链接到我了")
# mag=c[0].recv(1024)
# print("mag:",mag.decode())#decode()解码,接收的数据解码
# c[0].send("是".encode())
#线程 函数
def myrevc(c):
while True:
msg = c.recv(1024)#当没有消息的时候休息,阻塞
print(msg.decode())
threading._start_new_thread(myrevc,(c[0],))
while True:
msg = input()
c[0].send(msg.encode())
这个服务器建造好了就差客户端了,具体注意的都加在代码里的注释里了。接下来需要客户套接字了。
import socket
import threading
#创建客户套接字
u = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print("创建客户套接字")
u.connect(("192.168.66.180",9999))#链接对方不成功抛出异常
#这里是与服务器对应的,需要对应的ip和端口,
print("我已连接到服务")
# u.send("你是晓敏吗?".encode())#encode()编码
# mag=u.recv(1024)
# print(mag.decode())
def myrevc(c):
while True:
msg = c.recv(1024)#当没有消息的时候休息,阻塞
print(msg.decode())
threading._start_new_thread(myrevc,(u,))
while True:
print("输入")
msg = input()
u.send(msg.encode())
简单的局域网聊天就完成了。