標準の GCC ライブラリを使用して IRC に接続できますか?
IRC プロトコルは非常に単純な TCP プロトコルであり、別のコンソールに接続するよりもはるかに難しくないことを理解しています。
ただし、IP とポートのみを必要とするコンソール接続と比較して、IRC に接続する場合は、ニックネームとチャネルが追加の要件になります。
これがどのように行われるかの例を誰かに見せてもらえますか?
もちろん、簡単にできます!これはかなり基本的な TCP プロトコルです。
GCC は単なるコンパイラ (およびリンカー) です。GCC と IRC の間に直接接続はありません。
サーバーに接続して通信するには、必要なのはsys/socket.h
; 詳細には触れませんが、サーバー クライアント Linux の C/C++ プログラムに関する例とチュートリアルがたくさんあります。
telnet
(コマンドライン telnet クライアント プログラム)を使用して、IRC プロトコルを見て理解しようとしましょう。
irc.freenode.net
まず、サーバーへの接続を確立する必要があります (デフォルトのポートを使用しているとしましょう6667
):
$ telnet irc.freenode.net 6667
サーバーは次のように応答します。
:sturgeon.freenode.net NOTICE * :*** Looking up your hostname...
:sturgeon.freenode.net NOTICE * :*** Checking Ident
:sturgeon.freenode.net NOTICE * :*** No Ident response
:sturgeon.freenode.net NOTICE * :*** Couldn't look up your hostname
ここで、 、 、 の 3 つを送信する必要がPASS
ありUSER
ますNICK
。
PASS
接続パスワードを送信するコマンドです。公開サーバー (パスワードがない) では、PASS none
.
USER
ユーザー名、ホスト名、実名をサーバーに伝えるコマンドです。たとえば、あなたがwhois
誰かの場合username@1.2.3.4
、彼の「本名」が表示されます。クライアントが接続を確立した直後に送信するデータ。
NICK
ニックネームを設定するコマンドです。もちろん、サーバーはあなたのニックネームを知っているはずなので、接続後すぐに送信する必要があります!
それで、私たちは接続を確立しました。次に、これらのコマンドを送信する必要があります。telnet に入力するだけです。
PASS none
NICK sorandom29
USER blah blah blah blah
ウーフー、答えがあります!
:lindbohm.freenode.net 001 sorandom29 :Welcome to the freenode Internet Relay Chat Network sorandom29
もう 1 つの重要な点はPING
、コマンドとコマンドがあるため、サーバーに aを長時間PONG
応答しないと、接続が切断されることです。PONG
それがどのように行われるか見てみましょう。PING リクエストを受け取ります。
PING :lindbohm.freenode.net
そして、同じパラメータでそれに答えてください:
PONG :lindbohm.freenode.net
次に、どうすればチャンネルに参加できるのか疑問に思うかもしれません。
JOIN #linux
ええ、それだけです。
:lindbohm.freenode.net 470 sorandom29 #linux ##linux :Forwarding to another channel
:sorandom29!~blah JOIN ##linux
:lindbohm.freenode.net 332 sorandom29 ##linux :Welcome to ##Linux! Freenode's general Linux support/discussion channel.
別のコマンドはPRIVMSG
、実際のメッセージをチャネルまたは他の誰かに送信します。
PRIVMSG #linux :hello guys! i'm using telnet to connect to irc and that's such a stupid idea, i have to respond to PINGs manually!
したがって、誰もが次の#linux
ように表示されます。
<sorandom29> hello guys! i'm using telnet to connect to irc and that's such a stupid idea, i have to respond to PINGs manually!
:
aはメッセージ自体の前のプレフィックスであることに注意してください。
IRCに入るにはそれで十分だと思います。IRC プロトコル自体について読んで、telnet
またはnc
を使って試してみてから、基本的なソケットを使用してプログラムをコーディングするだけで、他の多くのことを自分で試すことができます。