目录
步骤:
创建TCP套接字:client_socket = socket(AF_INET,SOCK_STREAM)
配置监听8899接口:server_socket.bind(('ip地址',8899))
server_socket.listen(5)
链接ip地址:server_socket.bind(('ip地址',8899))
接收:client_socket, client_info = server_socket.accept()
socket套接字,双端通信:
客户端:
from socket import *
from threading import Thread
def recv_data():
while True:
# 最大字节1024
recv_data = client_socket.recv(1024)
recv_content = recv_data.decode('gbk')
print(f'服务端说:{recv_content}')
if recv_content == 'end':
print("结束接受消息")
break
def send_data():
while True:
msg = input('>')
client_socket.send(msg.encode('gbk'))
if msg == 'end':
break
if __name__ == '__main__':
client_socket = socket(AF_INET,SOCK_STREAM)
# 接口链接
client_socket.connect(('ip接口',8899))
t1 = Thread(target=recv_data)
t2 = Thread(target=send_data)
t1.start()
t2.start()
t1.join()
t2.join()
client_socket.close()
服务端,服务器:
单方通信:
from socket import *
from threading import Thread
def recv_data():
while True:
recv_data = client_socket.recv(1024)
recv_content = recv_data.decode("gbk")
print(f'客户端说:{recv_content},来自:{client_info}')
if recv_content == 'end':
print("结束接收消息")
break
def send_data():
while True:
msg = input(">")
client_socket.send(msg.encode('gbk'))
if msg == "end":
print("结束发送消息")
break
if __name__ == '__main__':
server_socket = socket(AF_INET,SOCK_STREAM)
server_socket.bind(('ip地址',8899))
server_socket.listen(5)
print("等待连接")
client_socket, client_info = server_socket.accept()
print("一个客户建立链接成功")
t1 = Thread(target=recv_data)
t2 = Thread(target=send_data)
t1.start()
t2.start()
t1.join()
t2.join()
client_socket.close()
server_socket.close()
双方通信,一次只能链接一个客户端:
from socket import *
from threading import Thread
def handle_client(client_socket, client_info):
while True:
recv_data = client_socket.recv(1024)
recv_content = recv_data.decode("gbk")
print(f"客户端说:{recv_content},来自:{client_info}")
if recv_content == 'end':
print("结束接收消息!!!")
break
client_socket.close()
if __name__ == '__main__':
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(("ip地址", 8899))
server_socket.listen(5)
print("等待接受连接")
while True:
client_socket, client_info = server_socket.accept()
print("一个客户端建立连接成功!")
t = Thread(target=handle_client, args=(client_socket, client_info))
t.start()
双方通信,一次链接多台设备:
from socket import *
from threading import Thread
def handle_client(client_socket, client_info):
while True:
recv_data = client_socket.recv(1024)
recv_content = recv_data.decode("gbk")
print(f"客户端说: {recv_content},来自:{client_info}")
if recv_content == 'end':
print("结束接收消息!!!")
break
msg = input("回复客户端消息: ")
client_socket.send(msg.encode("gbk"))
if msg == 'end':
print('结束发送消息!')
break
client_socket.close()
if __name__ == '__main__':
server_socket = socket(AF_INET, SOCK_STREAM)
server_socket.bind(("ip地址", 8899))
server_socket.listen(5)
print("等待接受连接")
while True:
client_socket, client_info = server_socket.accept()
print("一个客户端建立连接成功! ")
t = Thread(target=handle_client, args=(client_socket, client_info))
t.start()
双方通信,服务端自动回复,结束聊天输入end直接结束聊天:
from socket import *
from threading import Thread
def recv_data(client_socket, client_info):
while True:
# 最大接受1024
recv_data = client_socket.recv(1024)
recv_content = recv_data.decode('gbk')
print(f"客户端:{recv_content},来自:{client_info}")
client_socket.send("你好,我是菜狗!".encode('gbk'))
if recv_content == 'end':
client_socket.send('end'.encode('gbk'))
print('结束接收消息')
break
def handler(server_socket):
while True:
client_socket, client_info = server_socket.accept()
t1 = Thread(target=recv_data, args=(client_socket, client_info))
t1.start()
t1.join()
if __name__ == '__main__':
# 建立套接字
server_socket = socket(AF_INET, SOCK_STREAM)
# 本机监听12345端口
server_socket.bind(('ip接口',6552))
server_socket.listen(5)
print("等待连接!")
handler(server_socket)
server_socket.close()