nc
私はこれをしばらく研究しており、bashでこれを行うためのソーシャルスレッドサーバーを作成することにしました。驚くべきことに、うまくいきましたが、いくつかの問題があります。ここで解決したい主な問題は、送信スレッドと受信スレッドのコメントを介して一度に1つの接続のみを許可する方法です。送信スレッドとコメントの受信の間に遅延を追加する必要があるため、複数のクライアントが同時に受信して送信しようとする可能性があり、サーバーがハングする可能性があります。あるクライアントがスレッドを要求したときに他の人が接続できないようにしたいと思います。 netcatのバージョンが異なるため、別の問題は互換性です。私はこのプログラムをBSDを搭載したラップトップで開発し、nc
私のコンピュータでテストしたときに別のバージョンの "nc"を持っていたので、私のラップトップとは動作が異なり、サーバーがフリーズしました。この問題を解決する方法、または私が望むことを達成するための別の方法がある場合は本当に役立ちます。
クライアントコード:
#!/bin/bash
if [ "$1" == "" ]
then
echo "No IP selected."
exit 0
fi
if [ "$2" == "" ]
then
echo "No port selected."
exit 0
fi
if [ ! -e ~/.netthread ]
then
mkdir ~/.netthread
mkdir ~/.netthread/threads/
touch ~/.netthread/config
echo -n "Username: "
read name
echo $name >~/.netthread/config
fi
export ip=$1
export port=$2
getthread ()
{
echo "Getting thread..."
nc $ip $port >~/.netthread/threads/$ip:$port
sleep 1
nc $ip $port </dev/null
echo "Thread obtained!"
}
readthread ()
{
cat -s ~/.netthread/threads/$ip:$port | less +G
}
writethread ()
{
wow="$(cat ~/.netthread/config)"
touch /tmp/thread$$
chmod 700 /tmp/thread$$
echo "==============================" >> /tmp/thread$$
echo "User: $wow" >> /tmp/thread$$
echo -n "Date: " >> /tmp/thread$$
date >> /tmp/thread$$
echo "Press Ctrl-D to stop writing"
cat -s >> /tmp/thread$$
echo -e "\n" >> /tmp/thread$$
echo "==============================" >> /tmp/thread$$
echo "Sending comment..."
nc $ip $port >/dev/null
sleep 1
nc $ip $port </tmp/thread$$
echo "Comment sent!"
}
getthread
readthread
echo -n "Would you like to add a comment?(y/n): "
read lolz
if [ "$lolz" == "n" ]
then
exit 0
else
writethread
echo -n "Would you like to overview?(y/n): "
read over
if [ "$over" == "y" ]
then
getthread
readthread
fi
rm /tmp/thread$$
exit 0
fi
サーバーコード(はい、愚かです):
#!/bin/bash
while [ 1 ]
do
echo "send state"
sudo nc -l 22 < thread
echo "recive state"
sudo nc -l 22 >> thread
done