Python3:利用Socket实现多用户实时聊天.

我们继续在用代码演示Socket和Server 实现通信 这个章节继续扩展

首先我们要做到的是 实时通信,
这里面牵扯了3个知识点:

  1. 既然是实时通信,必须是用input在线输入
  2. 我们要把close 语句删除,否则会自己断掉
  3. 为了达到实时通信,必须不断的循环 用while 语句就行.
    现在我们来实现吧
    这个是客户端的代码
import  socket

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8000))
while True:         #调用了while循环并且是True代表永远不会断开
    a=input()       #调用了input 语句  
    client.send(a.encode("utf-8"))
    # 客户端socket 发送数据给服务端
    data = client.recv(1024)
    # 接受的数据
    print(data.decode("utf8"))

服务端的代码:

import  socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0",8000))


server.listen()
sock,addr=server.accept()
while True:        #调用了while循环并且是True代表永远不会断开
    data = sock.recv(1024)
    print(data.decode("utf-8"))
    a=input("")          #调用了input 语句  
    sock.send(a.encode("utf8"))
  

实时通信我们已经完成,
下边就是 如何达到多客户端的通信,这里用到了多线程的知识

多线程看下就好,我不做解释,后边的章节我会详细的介绍 .

服务端代码如下 :

import  socket
import threading

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0",8000))
server.listen()

def handle_sock(sock,addr):   #sock 的流程
    while True:      
        data = sock.recv(1024)
        b=data.decode("utf-8")
        print(data.decode("utf-8"))
        a = input("")
        sock.send(a.encode("utf8"))


while True:       
    sock, addr = server.accept()     #接受不同client 端的sock .
    client_thread=threading.Thread(target=handle_sock,args=(sock,addr))  #把sock 加入线程内
    client_thread.start()  #启动线程

我们可以试试下,我们可以启动两个client.

我试过了是可以行的通的,大家可以试试 ,不明白的地方在下边给我留言 ,谢谢
我都写好了刚才有小伙伴问我如何退出client呢 ?我在这补充下

在这里我把代码附上去,都是很简单,自己可以理解下:

import  socket
import threading

server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0",8000))


server.listen()

def handle_sock(sock,addr):
    while True:
        data = sock.recv(1024)
        b=data.decode("utf-8")

        print(data.decode("utf-8"))
        if b=="exit":
            break
        a = input("")
        sock.send(a.encode("utf8"))
    sock.close()

while True:
    sock, addr = server.accept()
    client_thread=threading.Thread(target=handle_sock,args=(sock,addr))
    client_thread.start()

你可能感兴趣的:(Python,Socket,编程(已完结))