Python Socket,并完成简单的聊天室

来源:互联网 发布:网络电视机顶合 编辑:程序博客网 时间:2024/06/05 20:35

Socket是什么?
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力
Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
网络协议:
TCP/IP,udb,http等等都是网络协议。
了解这么多我们开始做一个简单的聊天室吧。

服务器:

import socketimport threadings=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=Truedef 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=Falses.close()

客户端:

import socketimport threadings=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.connect(("192.168.11.58",9999))  # 使用connect方法连接服务器true=Truedef 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=Falses.close()

解释在注释中。

原创粉丝点击