소셜 스레드용 Netcat 서버/클라이언트

소셜 스레드용 Netcat 서버/클라이언트

nc나는 이것을 한동안 연구해왔고 bash에서 이를 위한 소셜 스레드 서버를 만들기로 결정했습니다. 놀랍게도 제대로 작동했지만 몇 가지 문제가 있습니다. 여기서 해결하고 싶은 주요 문제는 송신 스레드와 수신 스레드의 주석을 통해 한 번에 하나의 연결만 허용하는 방법입니다. 전송 스레드와 댓글 수신 사이에 지연을 추가해야 하기 때문에 둘 이상의 클라이언트가 동시에 수신 및 전송을 시도할 수 있으며 이로 인해 서버가 중단될 수 있습니다. 한 클라이언트가 스레드를 요청할 때 다른 사람이 연결할 수 없도록 허용하고 싶습니다. 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

관련 정보