socket的聊天程序代码及理解
时间: 2023-08-26 13:05:26 浏览: 49
以下是一个简单的基于socket的聊天程序代码示例,它使用Python语言编写,包括客户端程序和服务器程序。
服务器程序:
```python
import socket
# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 设置最大连接数,超过后排队
server_socket.listen(5)
while True:
# 建立客户端连接
client_socket, addr = server_socket.accept()
print("连接地址: %s" % str(addr))
# 发送欢迎信息给客户端
message = '欢迎来到聊天室!' + "\r\n"
client_socket.send(message.encode('utf-8'))
while True:
# 接收客户端消息
data = client_socket.recv(1024).decode('utf-8')
print("客户端消息: %s" % data)
# 如果客户端断开连接,则退出循环
if not data:
break
# 回复客户端消息
message = '收到消息:' + data + "\r\n"
client_socket.send(message.encode('utf-8'))
# 关闭连接
client_socket.close()
```
客户端程序:
```python
import socket
# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 连接服务,指定主机和端口
client_socket.connect((host, port))
# 接收欢迎信息
message = client_socket.recv(1024).decode('utf-8')
print(message)
while True:
# 发送消息给服务端
data = input("请输入消息:")
client_socket.send(data.encode('utf-8'))
# 接收服务端回复
message = client_socket.recv(1024).decode('utf-8')
print("服务端回复: %s" % message)
# 关闭连接
client_socket.close()
```
这个聊天程序的运行过程如下:
1. 运行服务器程序,等待客户端连接;
2. 运行客户端程序,连接到服务器;
3. 客户端会收到服务器发送的欢迎信息;
4. 客户端可以输入消息发送给服务器,服务器会回复收到的消息;
5. 客户端输入“exit”或者关闭程序,连接会断开。
理解:
这个聊天程序基于socket编写,使用了TCP协议进行通信。服务器程序监听指定的端口,等待客户端连接。客户端程序连接到服务器后,可以发送消息和接收服务器回复。当客户端输入“exit”或者关闭程序时,连接会断开。
在服务器程序中,使用`socket.socket()`创建一个socket对象,然后使用`socket.bind()`方法绑定指定的主机和端口,使用`socket.listen()`方法设置最大连接数,并使用`socket.accept()`方法等待客户端连接。当客户端连接成功后,服务器会发送欢迎信息给客户端,并进入一个无限循环,通过`socket.recv()`方法接收客户端发送的消息,然后使用`socket.send()`方法回复消息。当客户端断开连接后,服务器会关闭连接。
在客户端程序中,也使用`socket.socket()`创建一个socket对象,然后使用`socket.connect()`方法连接到服务器。客户端会收到服务器发送的欢迎信息,并进入一个无限循环,通过`input()`函数输入消息,然后使用`socket.send()`方法发送消息。客户端再通过`socket.recv()`方法接收服务器回复的消息,并输出到控制台。当客户端输入“exit”或者关闭程序时,连接会断开。