Socket是什么? 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。 网络协议: TCP/IP,udb,http等等都是网络协议。 了解这么多我们开始做一个简单的聊天室吧。
服务器:
import socket import threading s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(("0.0.0.0",9999)) ## 0,0,0,0的意思是所有ip都可以连接,后面的9999是端口。 s.listen(5) ##这个是socket的监听事件,用来约束连接数量 sock,addr =s.accept() #因为这个方法返回的是元组有两位,所以我直接使用两个接收。 print("有人连接!!") print(sock) #这里可以发现sock是网络用户的详细信息 print(addr) # 这个是连接网络的ip和端口 true=True def rec(sock): global true while true: t=sock.recv(1024).decode('utf8') #函数的核心语句就一条接收方法recv限制接收信息的大小使用byte单位。 if t == "exit": #如果输入exit退出 true=False print(t) trd=threading._start_new_thread(target=rec,args=(sock,)) #使用_start_new_thread方法定义线程并执行,args这里必须使用元组所以有逗号。 while true: #发送消息 t=input() sock.send(t.encode('utf8')) #使用socket的send方法发送消息无限循环 if t == "exit": true=False s.close()客户端:
import socket import threading s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("192.168.11.58",9999)) # 使用connect方法连接服务器 true=True def rec(s): global true while true: t=s.recv(1024).decode("utf8") #客户端也同理 if t == "exit": true=False print(t) trd=threading._start_new_thread(target=rec,args=(s,)) trd.start() while true: t=input() s.send(t.encode('utf8')) if t == "exit": true=False s.close()解释在注释中。