Igo*_*ist 14
当然,这很容易!这是一个非常基本的TCP协议.
GCC只是一个编译器(和一个链接器).GCC和IRC之间没有直接联系.
要连接到服务器并与之通信,您只需要sys/socket.h; 我不会详细介绍,有很多关于服务器客户端Linux C/C++程序的示例和教程.
让我们看一下并尝试使用telnet(命令行telnet客户端程序)来理解IRC协议.
首先,我们需要建立与服务器的连接(假设它是irc.freenode.net默认端口6667):
$ telnet irc.freenode.net 6667
Run Code Online (Sandbox Code Playgroud)
服务器回复:
: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
Run Code Online (Sandbox Code Playgroud)
现在,我们需要送三样东西:PASS,USER和NICK.
PASS是一个发送连接密码的命令.在公共服务器(没有任何密码)上,您可以发送PASS none.
USER是一个命令,告诉服务器您的用户名,主机名和真实姓名.比如,当你whois有人时,你会看到username@1.2.3.4他的"真实姓名".客户端在建立连接后立即发送的数据.
NICK是一个设置昵称的命令.当然服务器应该知道你的昵称,所以你应该在连接后立即发送它!
所以,我们建立了一个连接.现在你必须发送这些命令,只需将它们输入telnet:
PASS none
NICK sorandom29
USER blah blah blah blah
Run Code Online (Sandbox Code Playgroud)
哇哦,我们有一个答案!
:lindbohm.freenode.net 001 sorandom29 :Welcome to the freenode Internet Relay Chat Network sorandom29
Run Code Online (Sandbox Code Playgroud)
另一个重要的事情 - 有PING和PONG命令,所以如果你PONG长时间不回答服务器,你会断开连接.
让我们看看它是如何完成的.我们收到PING请求:
PING :lindbohm.freenode.net
Run Code Online (Sandbox Code Playgroud)
然后用相同的参数回答它:
PONG :lindbohm.freenode.net
Run Code Online (Sandbox Code Playgroud)
然后,您可能想知道如何加入频道.
JOIN #linux
Run Code Online (Sandbox Code Playgroud)
是的,就是这样.
: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.
Run Code Online (Sandbox Code Playgroud)
另一个命令是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!
Run Code Online (Sandbox Code Playgroud)
所以每个人#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!
Run Code Online (Sandbox Code Playgroud)
请注意,a :是消息本身之前的前缀.
我想这足以进入IRC.你可以通过阅读有关IRC协议本身,尝试使用telnet或者nc然后使用基本套接字编写程序来尝试其他许多东西.