用Python编写程序,实现两个人的聊天,利用TCP服务器客户端聊天,要求:(1)带输入框,能够发送输入的内容 (2) 带显示框,能显示自己发送的内容也能能够接受并显示对方的消息,程序尽量简单,让目标计算机不会积极拒绝
时间: 2024-02-20 17:02:40 浏览: 30
好的,这是一个比较常见的应用场景,我们可以使用 Python 的 socket 库来实现。下面是一个简单的示例代码:
服务端代码:
```python
import socket
# 创建一个 TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
server_address = ('localhost', 8080)
print('starting up on %s port %s' % server_address)
server_socket.bind(server_address)
# 开始监听
server_socket.listen(1)
while True:
# 等待客户端连接
print('waiting for a connection...')
client_socket, client_address = server_socket.accept()
print('connection from', client_address)
while True:
# 接收客户端消息
data = client_socket.recv(1024)
if not data:
break
print('received "%s"' % data.decode())
# 发送回复消息
reply = 'received: ' + data.decode()
client_socket.sendall(reply.encode())
# 关闭连接
client_socket.close()
```
客户端代码:
```python
import socket
import sys
from tkinter import *
# 创建一个 TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
server_address = ('localhost', 8080)
print('connecting to %s port %s' % server_address)
client_socket.connect(server_address)
# 创建 GUI 界面
def send_message():
message = input_text.get()
client_socket.sendall(message.encode())
input_text.delete(0, END)
def receive_message():
while True:
data = client_socket.recv(1024)
if not data:
break
chat_text.insert(END, data.decode() + '\n')
root = Tk()
root.title('Chat')
chat_frame = Frame(root)
chat_frame.pack(side=TOP)
scrollbar = Scrollbar(chat_frame)
scrollbar.pack(side=RIGHT, fill=Y)
chat_text = Text(chat_frame, yscrollcommand=scrollbar.set)
chat_text.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=chat_text.yview)
input_frame = Frame(root)
input_frame.pack(side=BOTTOM)
input_text = Entry(input_frame)
input_text.pack(side=LEFT)
send_button = Button(input_frame, text='Send', command=send_message)
send_button.pack(side=RIGHT)
# 创建一个线程接收消息
import threading
t = threading.Thread(target=receive_message)
t.start()
root.mainloop()
```
运行服务端代码后,再运行客户端代码,就可以开始聊天了。注意,这里使用了 tkinter 库来创建 GUI 界面,需要先安装该库。