2016-09-17 86 views
-2

所以我用C++寫一個IRC bot,我寫我自己發送功能Winsock發送功能不發送

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 ##路:測試到控制檯,我沒有看到其他客戶端上的任何東西,那麼,有誰能夠像幫助?我對於stackoverflow和C++相當陌生,因此非常感謝任何反饋。

+0

因此,它打印發送失敗的消息?或不?而bobSocket是一個有效的,正確連接的插座? –

+0

@JasonC不,它不會打印失敗的消息,而bobSocket是一個有效的,連接正確的套接字,它連接到IRC寄存器nick並加入我想要的通道,但輸入只是不會發送到IRC服務器。 – newuser9282928292

+0

你確定它沒有發送給服務器嗎?難道它只是沒有正確的格式?如果你正在設法連接到服務器,並加入一個房間,我的投注將是你發送格式錯誤的命令。 –

回答

1

如果send()對於PRIVMSG ##channel :hello返回7,9,7,則表示您發送三條不同發送中的一條線,並且失去內部空間併發送尾隨換行符。所以問題可能是你錯誤地解析了輸入。你實際發送的是:

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

並再次注意到你已經失去了內部空間。

我相信你應該從控制檯讀取行,而不是單詞。

請注意,我將以'if'開始此答案,因爲您對評論的回覆遠未明確。

+0

抱歉的不清楚,即時通訊相當新的和非常糟糕的描述,但是,你可以給我另一種方式2解析比char_cast – newuser9282928292