按照C/S模型编写两个程序,一个是服务器程序,一个是客户端程序。设计的程序包含以下功能: 1.Windows环境下运行,并有显示界面。 2.服务器端监听端口,有客户请求时就显示客户端IP地址、端口和收到的数据。
时间: 2024-02-06 19:09:32 浏览: 68
服务器/客户端程序
好的,我可以给你提供一个基于Python的示例代码来实现这个功能。
首先,我们需要安装socket模块来实现网络通信。可以在终端中使用如下命令进行安装:
```
pip install socket
```
接下来,我们来分别编写服务器端和客户端的代码。
#### 服务器端代码
```python
import socket
import tkinter as tk
class ServerGUI:
def __init__(self):
self.root = tk.Tk()
self.root.title("服务器端")
self.root.geometry('400x300')
self.log_text = tk.Text(self.root)
self.log_text.pack(expand=True, fill=tk.BOTH)
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind(('localhost', 5555))
self.server_socket.listen(5)
self.log("服务器已启动,等待客户端连接...")
self.accept_thread = threading.Thread(target=self.accept_client)
self.accept_thread.start()
def log(self, msg):
self.log_text.insert(tk.END, msg + "\n")
def accept_client(self):
while True:
client_socket, client_address = self.server_socket.accept()
self.log("客户端已连接:{}:{}".format(client_address[0], client_address[1]))
receive_thread = threading.Thread(target=self.receive_data, args=(client_socket,))
receive_thread.start()
def receive_data(self, client_socket):
while True:
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
self.log("收到来自客户端{}的消息:{}".format(client_socket.getpeername(), data))
# 这里可以添加服务器发送消息的代码
# ...
client_socket.close()
server_gui = ServerGUI()
tk.mainloop()
```
服务器端代码用到了tkinter模块来创建GUI界面。在初始化函数中,我们创建一个文本框用于显示日志信息。接着创建一个服务器socket并监听5555端口。在accept_client函数中,我们使用循环等待客户端连接。当有客户端连接时,我们创建一个新的线程来处理该客户端的数据。在receive_data函数中,我们使用循环不断接收客户端发送的数据,并将其显示在日志文本框中。
#### 客户端代码
```python
import socket
import tkinter as tk
class ClientGUI:
def __init__(self):
self.root = tk.Tk()
self.root.title("客户端")
self.root.geometry('400x300')
self.log_text = tk.Text(self.root)
self.log_text.pack(expand=True, fill=tk.BOTH)
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.client_socket.connect(('localhost', 5555))
self.log("连接服务器成功")
self.receive_thread = threading.Thread(target=self.receive_data)
self.receive_thread.start()
def log(self, msg):
self.log_text.insert(tk.END, msg + "\n")
def receive_data(self):
while True:
data = self.client_socket.recv(1024).decode('utf-8')
if not data:
break
self.log("收到来自服务器的消息:{}".format(data))
def send_data(self, data):
self.client_socket.send(data.encode('utf-8'))
self.log("已发送消息:{}".format(data))
client_gui = ClientGUI()
tk.mainloop()
```
客户端代码同样用到了tkinter模块来创建GUI界面。在初始化函数中,我们创建一个文本框用于显示日志信息,并创建一个客户端socket并连接到服务器。在receive_data函数中,我们使用循环不断接收服务器发送的数据,并将其显示在日志文本框中。在send_data函数中,我们可以添加发送消息的代码。
以上就是一个简单的C/S模型程序的实现。需要注意的是,在运行程序时,先运行服务器端程序,再运行客户端程序。如果想要在不同的机器上运行服务器和客户端程序,需要将服务器端的IP地址改为服务器所在机器的IP地址。
阅读全文