我正在编写一个程序,它有两个有界限的两个不同的端口。我创建了另一个程序的对象,它在一个单独的文件中(它也有一个套接字初始化并绑定到一个单独的端口)。我得到一个运行时异常,当我试图打印WSAGetLastError它返回错误代码:10093。如何在同一个程序中创建多个套接字。
我想知道的是,我如何使用WSAStartup()和WSACleanup()。我是否需要为每个套接字调用WSAStartup()并调用WSACleanup()三次。
有人可以帮助我解决这个问题。 在此先感谢.. :-)
我正在编写一个程序,它有两个有界限的两个不同的端口。我创建了另一个程序的对象,它在一个单独的文件中(它也有一个套接字初始化并绑定到一个单独的端口)。我得到一个运行时异常,当我试图打印WSAGetLastError它返回错误代码:10093。如何在同一个程序中创建多个套接字。
我想知道的是,我如何使用WSAStartup()和WSACleanup()。我是否需要为每个套接字调用WSAStartup()并调用WSACleanup()三次。
有人可以帮助我解决这个问题。 在此先感谢.. :-)
您应该根据每个节目调用WSAStartup()
/WSACleanup()
,即每个节目一次。
谢谢,我已经按照你的建议调用了WSAStartup()和WSACleanup()。但我在这一点上得到相同的错误 'IP = inet_ntoa(*(struct in_addr *)* hostEntry-> h_addr_list);' 当我试图调试时,hostEntry返回null。这里, 'hostEntry = gethostbyname(hostId);' – rutharanga
呃哦,他说的是C ... – Ashe
@rutharanga如果'gethostbyname'返回NULL,你应该立即检查'WSAGetLastError'。 –
你只需要调用WSAStartup一次(在你的地址空间\进程中),当你使用winsock dll,WSACleanup完成使用套接字时。
我通常做类似的东西实现开机\清理:(这确实是只针对单线程应用程序安全,但使用互斥锁多线程并不难......)
class HigherLevelSocketWrapper
{
private:
static int m_iInstanceCount = 0;
public:
HigherLevelSocketWrapper()
{
//Check if m_iInstanceCount is 0, if so, call WSAStartup.
//increment m_iInstanceCount
}
virtual ~HigherLevelSocketWrapper()
{
//decrement m_iInstanceCount
//Check if m_iInstanceCount is 0, if so, call WSACleanup.
}
};
如果你在问题中也有你的代码,这将有所帮助! –