写一个socket简易聊天程序代码
时间: 2023-08-31 12:29:20 浏览: 90
### 回答1:
这里给出一个简单的Python socket聊天程序的代码:
服务端:
```python
import socket
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口
server_socket.bind(('0.0.0.0', 9999))
# 开始监听
server_socket.listen(5)
# 等待客户端连接
print('等待客户端连接...')
client_socket, addr = server_socket.accept()
print('客户端已连接,地址为:', addr)
while True:
# 接收客户端消息
recv_msg = client_socket.recv(1024).decode('utf-8')
print('客户端:', recv_msg)
# 发送消息给客户端
send_msg = input('我:')
client_socket.send(send_msg.encode('utf-8'))
```
客户端:
```python
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
client_socket.connect(('127.0.0.1', 9999))
while True:
# 发送消息给服务端
send_msg = input('我:')
client_socket.send(send_msg.encode('utf-8'))
# 接收服务端消息
recv_msg = client_socket.recv(1024).decode('utf-8')
print('服务端:', recv_msg)
```
运行服务端和客户端代码,就可以进行聊天了。注意,这个是单向聊天,需要在服务端和客户端分别输入消息。如果要实现双向聊天,可以将服务端和客户端的代码合并,并且在发送消息后接收对方的回复。
### 回答2:
以下是一个简单的socket聊天程序的代码实现:
```python
# 服务器端代码
import socket
def server_program():
# 创建一个socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取主机名
host = socket.gethostname()
port = 12345 # 设置监听的端口号
# 绑定主机名和端口号
server_socket.bind((host, port))
# 监听连接
server_socket.listen(1)
print("等待客户端连接...")
# 接受客户端连接
client_socket, address = server_socket.accept()
print("连接来自: " + str(address))
while True:
# 接收消息
data = client_socket.recv(1024).decode()
print("收到消息: " + data)
# 如果客户端发送的消息是"退出",则关闭连接
if data == "退出":
break
# 发送回复消息
message = input("回复消息: ")
client_socket.send(message.encode())
# 关闭连接
client_socket.close()
if __name__ == '__main__':
server_program()
```
```python
# 客户端代码
import socket
def client_program():
# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取服务器的主机名和端口号
host = socket.gethostname()
port = 12345
# 连接服务器
client_socket.connect((host, port))
while True:
# 发送消息
message = input("发送消息: ")
client_socket.send(message.encode())
# 接收回复消息
data = client_socket.recv(1024).decode()
print("收到回复: " + data)
# 如果发送的消息是"退出",则断开连接
if message == '退出':
break
# 关闭连接
client_socket.close()
if __name__ == '__main__':
client_program()
```
此聊天程序是基于TCP协议的socket通信实现的。首先,服务器端通过`socket.bind()`绑定主机名和监听的端口号,然后通过`socket.listen()`开始监听客户端的连接。当客户端连接成功后,服务器端通过`socket.accept()`接受客户端的连接请求,并打印连接来自哪个地址。
在循环中,服务器端接收客户端发送的消息,如果收到的消息是"退出",则断开连接;否则,服务器端通过`input()`获取回复消息,并通过`socket.send()`发送给客户端。
客户端通过`socket.connect()`连接服务器,同样也在循环中,首先通过`input()`发送消息给服务器端,然后通过`socket.recv()`接收服务器端的回复消息。如果发送的消息是"退出",则断开连接。
以上即为简易socket聊天程序的代码实现。
### 回答3:
以下是一个简易的Socket聊天程序的代码示例:
```python
# 服务器端代码
import socket
# 创建一个TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)
# 监听连接
server_socket.listen(1)
print("等待客户端连接...")
# 等待一个客户端连接
client_socket, client_address = server_socket.accept()
print("已连接客户端:", client_address)
while True:
try:
# 接收客户端发送的消息
data = client_socket.recv(1024).decode()
if not data:
break
print("收到客户端消息:", data)
# 回复消息给客户端
response = "服务器收到消息:" + data
client_socket.sendall(response.encode())
except Exception as e:
print("发生错误:", str(e))
break
# 关闭连接
client_socket.close()
server_socket.close()
# 客户端代码
import socket
# 创建一个TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 服务器地址和端口
server_address = ('localhost', 12345)
# 连接到服务器
client_socket.connect(server_address)
print("已连接服务器:", server_address)
while True:
try:
# 向服务器发送消息
message = input("请输入消息:")
client_socket.sendall(message.encode())
# 接收服务器回复的消息
response = client_socket.recv(1024).decode()
print("收到服务器消息:", response)
except KeyboardInterrupt:
print("聊天结束.")
break
# 关闭连接
client_socket.close()
```
以上代码是一个简单的基于TCP/IP协议的Socket聊天程序。程序运行时,服务器端先绑定地址和端口,并等待客户端连接。客户端连接到服务器后,可以输入消息发送给服务器,服务器收到消息后会发送回复给客户端。客户端接收到回复后再次发送消息,如此往复,直到通过键盘中断退出聊天。
阅读全文