linux实现简易多人聊天程序:客户端(cli01)通过TCP(或UDP)连接到聊天服务器(serv)进行聊天。1. 基本功能:客户1发送数据到服务器,服务器转发到客户2;连接信息需要放到配置文件init.txt 中(例如:127.0.0.1|8080),通过读取配置文件,客户端连接服务器端。 2. 外加功能:多人聊天的功能,能显示谁在什么时间说了什么话。服务器端可以显示当前在线人数。
时间: 2024-03-26 21:36:22 浏览: 142
好的,这是一个比较简单的多人聊天程序,以下是大致的实现思路:
1. 客户端(cli01)通过读取配置文件(init.txt)获取服务器地址和端口,并建立TCP连接;
2. 客户端进入聊天室后,可以发送消息到服务器端;
3. 服务器端接收到客户端的消息后,将其转发给所有其他在线客户端;
4. 服务器端需要记录每条消息的发送者、发送时间和内容,并可以在客户端列表中显示当前在线人数;
5. 客户端需要显示所有收到的消息和当前在线人数。
下面是一个简单的 Linux 实现代码,仅供参考:
服务器端代码:
```bash
#!/bin/bash
# 存放所有在线客户端的信息
clients=()
# 处理客户端消息的函数
handle_client() {
client_socket=$1
addr=$2
while true; do
# 接收客户端消息
data=$(echo "" | nc -l -p $client_socket)
if [ -z "${data}" ]; then
echo "Client disconnected: $addr"
clients=("${clients[@]/$client_socket}")
break
else
# 记录发送时间和发送者
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
message="[$timestamp][$addr]: $data"
echo $message
# 转发消息给其他客户端
for c in "${clients[@]}"; do
if [ "$c" != "$client_socket" ]; then
echo $message | nc -w 0 $c
fi
done
fi
done
}
# 启动服务器
start_server() {
host=$1
port=$2
# 监听端口
mkfifo /tmp/fifo.$port
nc -lk -p $port 0< /tmp/fifo.$port | tee /tmp/fifo.$port | while true; do
client_socket=$(tail -n 1 /tmp/fifo.$port)
echo "Client connected: $client_socket"
# 将客户端加入在线列表
clients+=($client_socket)
# 处理客户端消息的函数
handle_client $client_socket $client_socket &
done
}
# 从配置文件中读取服务器地址和端口
read host port <<< $(awk -F '|' '{print $1, $2}' init.txt)
start_server $host $port
```
客户端代码:
```bash
#!/bin/bash
# 处理接收消息的函数
receive_msg() {
while true; do
data=$(nc -l -p $1)
if [ -z "${data}" ]; then
break
else
echo $data
fi
done
}
# 启动客户端
start_client() {
host=$1
port=$2
# 连接服务器
exec 3<> /dev/tcp/$host/$port
# 启动接收消息的函数
receive_msg $port &
# 发送消息
while true; do
read -p ">" msg
if [ -z "$msg" ]; then
break
fi
# 发送消息给服务器
echo $msg >&3
done
exec 3>&-
}
# 从配置文件中读取服务器地址和端口
read host port <<< $(awk -F '|' '{print $1, $2}' init.txt)
start_client $host $port
```
需要注意的是,以上代码仅为示例代码,实际上还有很多细节需要处理,例如客户端与服务器端的异常处理、消息的格式化等等。
阅读全文