【问题标题】:WinSock Send Function not sendingWinSock 发送功能不发送
【发布时间】:2016-09-17 01:17:59
【问题描述】:

所以我正在用 C++ 编写一个 IRC 机器人,并且我编写了自己的发送函数

    int Send(char* MessageToSend) {
    initResult = send(bobSocket, MessageToSend, (int)strlen(MessageToSend), 0);
    if (initResult == SOCKET_ERROR) {
        printf("send failed: %d\n", WSAGetLastError());
        closesocket(bobSocket);
        WSACleanup();
        return 1;
    }
}

每当我在我的 sendmessage 函数中使用它时(循环检查消息,然后运行所有输入以发送)就像这样

while(1 > 0) {
 string b;
 cin >> b;
 char* INPUT = const_cast<char*>(b.c_str());
 Send(b);
}

但是当我将 PRIVMSG ##channel :test 放入控制台时,我在其他客户端上看不到任何内容,所以,有人可以帮忙吗?我对 stackoverflow 和 C++ 还很陌生,因此非常感谢任何反馈。

【问题讨论】:

  • 所以它打印发送失败消息?或不?而 bobSocket 是一个有效的、正确连接的套接字?
  • @JasonC 不,它不打印失败的消息,并且 bobSocket 是一个有效的、正确连接的套接字,它连接到 IRC 寄存器 nick 并加入我想要的频道,但输入只是没有'不发送到 IRC 服务器。
  • 你确定它没有发送到服务器吗?难道它只是没有正确的格式吗?如果您设法连接到服务器并加入房间,我敢打赌您发送的命令格式错误。
  • send 返回什么?
  • 你错了,send总是返回一些东西。

标签: c++ iostream winsock


【解决方案1】:

如果send()PRIVMSG ##channel :hello 返回 7、9、7,这意味着您在三个不同的发送中发送该行,并且您丢失了内部空格,并发送了尾随的换行符。所以问题可能是您错误地解析了输入。您实际发送的是:

PRIVMSG (7 bytes)
##channel (9 bytes)
:hello\n (7 bytes)

并再次注意您丢失了内部空间。

我相信您应该从控制台读取行,而不是文字。

请注意,我是用“if”开始回答这个问题的,因为您对 cme​​ts 的回答还不是很清楚。

【讨论】:

  • 对不起,不清楚,我很新,很不擅长描述,但是,你能给我另一种方式 2 解析而不是 char_cast
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多