c - 建立与 IRC 的连接

标签 c linux unix

是否可以使用标准 GCC 库连接到 IRC?

我理解 IRC 协议(protocol)是一个非常简单的 TCP 协议(protocol),它应该不会比连接到另一个控制台难多少。

但是,与仅需要 IP 和端口的控制台连接相比,昵称和 channel 在连接到 IRC 时是额外的要求。

谁能告诉我这是如何完成的示例?

最佳答案

当然,这很容易实现!这是一个非常基本的 TCP 协议(protocol)。

GCC 只是一个编译器(和一个链接器)。 GCC 和 IRC 之间没有直接联系。
要连接到服务器并与之通信,您只需要sys/socket.h;我不会详细介绍,关于服务器-客户端 linux C/C++ 程序的示例和教程很多。​​

让我们使用 telnet(命令行 telnet 客户端程序)查看并尝试理解 IRC 协议(protocol)。

首先,我们需要建立与服务器的连接(假设它是 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

现在我们需要发送三个东西:PASSUSERNICK

PASS 是发送连接密码的命令。在公共(public)服务器(没有任何密码)上,您可以发送 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

另一个重要的事情 - 有 PINGPONG 命令,所以如果你长时间没有用 PONG 应答服务器时间,你会断开连接。

让我们看看它是如何完成的。我们收到一个 PING 请求:

PING :lindbohm.freenode.net

然后用相同的参数回答它:

PONG :lindbohm.freenode.net

然后,您可能想知道如何加入 channel 。

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,它向 channel 或其他人发送实际消息:

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!

请注意,: 是消息本身之前的前缀。

我想这足以进入 IRC。您可以通过阅读有关 IRC protocol 的所有其他内容来尝试自己本身,尝试使用 telnetnc,然后开始使用基本套接字编写程序。

关于c - 建立与 IRC 的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12655951/

相关文章:

mysql:如何尾部,然后 cat/dev/null *.ibd 文件

bash - 如何在 Notepad++ 6.5.5 上将 unix/bash 设置为默认语言

c - 宏等价物(C/C++)?

c - 对于相同的参数,函数的行为不同

c - 如何从 C 中的字符串中获取子字符串?

php - 从网站的单个目录下载所有图像

c++ - mcrypt linux 如何使用 rijndael 256 cbc

PHP 脚本不运行也不给出错误消息

c - C 源代码中是否需要 include<conio.h>?

unix - 如何通过CLI重命名7zip存档中的文件?