我目前正在尝试创建使用winsock的服务器和客户端应用程序,使用主程序我需要有第二个线程来始终监听数据。
此通讯无阻塞。我在找到线程之间的通信方式时遇到了麻烦,我正在寻找的一个例子是:服务器向客户端发送字符串,例如“viewData”和主要线程将获取此类信息,然后也可以调用特定函数。
以下是我的主题示例,我使用_beginthread( (void(*)(void*))SocketReceive, 0, (void*)&ohuman );
//thread focused on listening to connection
void SocketReceive( comms* ohuman)
{
char buffer[1000];
int inDataLength;
std::string contents;
for(;;)
{
if(!ohuman->getGameOn())
{
// Display message from server
memset(buffer,0,999);
inDataLength=recv((INT_PTR)ohuman->getSocket(),buffer,1000,0);
contents = std::string(buffer); //create a string from the char array for easy access
//only display if we get some content
if(inDataLength > 0)
{
//???DealWithMessage(
int nError=WSAGetLastError();
if(nError!=WSAEWOULDBLOCK&&nError!=0)
{
std::cout<<"Winsock error code: "<<nError<<"\r\n";
std::cout<<"Server disconnected!\r\n";
// Shutdown our socket
shutdown((INT_PTR)ohuman->getSocket(),0x01);
// Close our socket entirely
closesocket((INT_PTR)ohuman->getSocket());
break;
}
}
}
_endthread();
}
我也看到了这个应该帮助ITC的网站,对此有任何建议 - > http://derkarl.org/itc/
通过一个简单的主循环,我对任何可能有用的方法感兴趣,我一直试图弄清楚这几天没有运气,非常感谢任何帮助。