使用python实现两个主机的相互交流,并且用图形化界面实现两台主机聊天的界面,有接受发送功能
时间: 2024-02-23 12:59:38 浏览: 21
要实现两台主机的相互交流,需要使用网络编程。Python提供了socket模块来实现网络编程。下面给出一个简单的示例代码,可以实现两台主机之间的聊天功能,并且使用Tkinter库来实现图形化界面。
```python
# server.py
import socket
import threading
# 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 绑定端口号
s.bind((host, port))
# 设置最大连接数,超过后排队
s.listen(5)
# 客户端线程
def client_thread(conn, addr):
while True:
try:
# 接收数据
data = conn.recv(1024).decode()
if not data:
break
# 输出数据
print('Received from {}: {}'.format(addr[0], data))
except:
break
# 关闭连接
conn.close()
# 接受客户端连接
while True:
conn, addr = s.accept()
print('Connected with {}:{}'.format(addr[0], addr[1]))
# 创建新线程处理客户端连接
threading.Thread(target=client_thread, args=(conn, addr)).start()
```
```python
# client.py
import socket
import threading
from tkinter import *
# 连接服务器
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 9999
s.connect((host, port))
# 发送消息
def send_message():
msg = input_msg.get()
s.send(msg.encode())
input_msg.set('')
# 接收消息
def recv_message():
while True:
try:
msg = s.recv(1024).decode()
if msg:
info_text.insert(END, 'Other: {}\n'.format(msg))
except:
s.close()
break
# 创建GUI界面
root = Tk()
root.title('Chat Room')
# 创建文本框和滚动条
info_text = Text(root)
info_text.pack(side=LEFT, fill=BOTH, expand=YES)
scrollbar = Scrollbar(info_text)
scrollbar.pack(side=RIGHT, fill=Y, padx=5, pady=5)
scrollbar.config(command=info_text.yview)
info_text.config(yscrollcommand=scrollbar.set)
# 创建输入框和发送按钮
input_msg = StringVar()
input_entry = Entry(root, textvariable=input_msg)
input_entry.pack(side=LEFT, fill=X, expand=YES, padx=5, pady=5)
send_button = Button(root, text='Send', command=send_message)
send_button.pack(side=RIGHT, padx=5, pady=5)
# 创建接收消息的线程
threading.Thread(target=recv_message).start()
# 进入消息循环
root.mainloop()
```
这段代码中,server.py是服务器端代码,client.py是客户端代码。当客户端连接上服务器后,可以在GUI界面中输入消息并发送,服务器会把消息显示出来。同时,服务器也可以向客户端发送消息。你可以在不同的主机上运行这两个程序,就可以实现两台主机之间的聊天了。