我正在尝试用C ++创建一个小的IRC库。 使用RAW套接字时,似乎无法连接。
它远未完成 - 因此只有两个功能。
以下是代码:
#include <iostream>
#include <winsock2.h>
using namespace std;
class Bot
{
SOCKET sock;
public:
void Init();
void Connect(const char* servername, int port, const char* nick);
};
void Bot::Init()
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2, 0), &WSAData) != 0)
{
cout << "ERROR: Failed WSAStartup" << endl;
}
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET)
{
cout << "ERROR: Invalid Socket\n";
}
}
void Bot::Connect(const char* servername, int port, const char* nick)
{
hostent* host;
host = gethostbyname(servername);
sockaddr_in sockAddr;
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(port);
sockAddr.sin_addr.S_un.S_addr = ((in_addr *)(host->h_addr))->s_addr;
while(connect(sock, (sockaddr *) &sockAddr, sizeof(sockAddr)) == SOCKET_ERROR)
{
cout << "ERROR: Can't connect to Socket.\n"; //This is the problem
Sleep(10000.0);
}
}
int main()
{
Bot bot;
bot.Init();
bot.Connect("wolfe.freenode.net", 6777, "nick");
}
非常感谢帮助 - 我完全陷入了困境。 连接问题在这里:
while(connect(sock, (sockaddr *) &sockAddr, sizeof(&sockAddr)) == SOCKET_ERROR)
所以我假设问题在
void Bot::Connect(const char* servername, int port, const char* nick)
修改:
如果我改变
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
到
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
我现在得到错误代码10014(现在它不会遮挡成员变量)