【发布时间】:2012-04-27 01:15:11
【问题描述】:
使用典型的 irc 客户端,我可以输入:
/server localhost 6667 nick:pass
当我输入为 ZNC 配置的 nick:pass(一个 IRC 保镖)时,我被转发到我的 server/nick:pass 组合下 znc 连接到的服务器。
如何以编程方式同时打开所有这些参数的 winsock 连接? /server localhost 6667 nick:pass
我尝试在连接后发送数据,但 znc 似乎忽略了请求。或者我根本没有连接到它。此代码已连接到不需要 Ping 身份验证的 IRC 服务器,所以我知道它可以工作。
#define AF_INET 2
#define SOCK_STREAM 1
#define SOL_SOCKET 0xffff
#define SO_SNDTIMEO 0x1005
string server_addr = "127.0.0.1";
int server_port = 6667;
void ircconnect(){
int struct_sockaddr[4];
int addr, port_low, port_high;
int opts[1];
int c;
if (irc_disabled == 1) return(0);
// fill the sockaddr struct
addr = inet_addr(server_addr);
port_low = server_port & 0x00ff;
port_high = (server_port & 0xff00) >> 8;
struct_sockaddr[0] = AF_INET | (port_high << 16) | (port_low << 24);
struct_sockaddr[1] = addr;
struct_sockaddr[2] = 0;
struct_sockaddr[3] = 0;
// connect
s = socket(AF_INET, SOCK_STREAM, 0);
opts[0] = 1000; // send timeout milliseconds
setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, opts, 4);
c = connect(s, struct_sockaddr, 16);
Sleep(5000);
sendLine(nick + ":" + password);
【问题讨论】:
-
1.不要在您的文件中定义您的
#defines。相反,#include适当的头文件。 2、不要再手动设置AF_INET。现在是 2012 年,是时候使用getaddrinfo()了。 -
好的。感谢您的建议。我会的。