我们继续在用代码演示Socket和Server 实现通信 这个章节继续扩展
首先我们要做到的是 实时通信,
这里面牵扯了3个知识点:
- 既然是实时通信,必须是用input在线输入
- 我们要把close 语句删除,否则会自己断掉
- 为了达到实时通信,必须不断的循环 用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()