这一篇编程的心得文章, 我想把它作为我的程序, 现在我做了一个基于对话框的程序, 如何把这HandleConnect和我的对话框程序联起来? 注意到其中没有 WSAStartup(sockVersion, &wsaData); 和 WSACleanup();
另外 struRcvMsg * srmsg = ( struRcvMsg *)lpParam;
中的struRcvMsg 大概是个什么样的结构?谢谢!
UINT HandleLink(LPVOID lpParam)
{
SOCKET sClient = (SOCKET)lpParam;
CWinThread * hThread;
char szBuff[2048];
int iret;
char szmsg[200];
struRcvMsg * srmsg = ( struRcvMsg *)lpParam; int ims = 60000;
setsocketopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&ims, sizeof(ims) ); iret = recv(sClient, szBuff, 2048, 0 );
if ( iret == 0 )
{
sprintf(szmsg, "%s", "client closed!");
return -1;
}
else if ( iret == SOCKET_ERROR )
{
sprintf(szmsg, "recv() failded: "%d\n", WSAGetLastErroe());
return -1;
}
szBuff[iret] = '\0';
sprintf(szmsg, "Receive from client: %d bytes", iret);
DealWithMsg(szBuff);
closesocket(sClient);
}
DWORD WINAPI HandleConnect(LPVOID lpParam)
{
SOCKET sListen, sClient;
struct sockaddr_in local, client; CWinThread* hThread;
char szmsg[200];
char szbuff[2048]; sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if ( sListen == SOCKET_ERROR)
{
sprintf(szmsg, "socket() failed! Error: %d", WSAGetLastError());
return 1; }
if ( sListen == INVALID_SOCKET)
{
sprintf(szmsg, "Failed socket()");
WSACleanup();
//return SERVER_SOCKET_ERROR;
return 1;
} local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(8888); if ( bind(sListen, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)
{
sprintf(szmsg, "socket() failed! Error: %d", WSAGetLastError());
return 1;
} listen(sListen, SOMAXCONN);
while(true)
{
int iAddrSize = sizeof(client);
sClient = accept(sListen, (struct sockaddr *)&client, &iAddrSize); if ( sClient == INVALID_SOCKET)
{
Sleep(10);
continue;
}
sprintf(szmsg, "Accepted client: %s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
hThread = AfxBeginThread(HandleLink, sClient, THREAD_PRIORITY_NORMAL, 0, 0, NULL); if ( hThread == NULL )
{
Sleep(10);
continue;
}
CloseHandle(hThread);
}
closesocket(sListen);
WSACleanup();
return 0;
}
另外 struRcvMsg * srmsg = ( struRcvMsg *)lpParam;
中的struRcvMsg 大概是个什么样的结构?谢谢!
UINT HandleLink(LPVOID lpParam)
{
SOCKET sClient = (SOCKET)lpParam;
CWinThread * hThread;
char szBuff[2048];
int iret;
char szmsg[200];
struRcvMsg * srmsg = ( struRcvMsg *)lpParam; int ims = 60000;
setsocketopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&ims, sizeof(ims) ); iret = recv(sClient, szBuff, 2048, 0 );
if ( iret == 0 )
{
sprintf(szmsg, "%s", "client closed!");
return -1;
}
else if ( iret == SOCKET_ERROR )
{
sprintf(szmsg, "recv() failded: "%d\n", WSAGetLastErroe());
return -1;
}
szBuff[iret] = '\0';
sprintf(szmsg, "Receive from client: %d bytes", iret);
DealWithMsg(szBuff);
closesocket(sClient);
}
DWORD WINAPI HandleConnect(LPVOID lpParam)
{
SOCKET sListen, sClient;
struct sockaddr_in local, client; CWinThread* hThread;
char szmsg[200];
char szbuff[2048]; sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if ( sListen == SOCKET_ERROR)
{
sprintf(szmsg, "socket() failed! Error: %d", WSAGetLastError());
return 1; }
if ( sListen == INVALID_SOCKET)
{
sprintf(szmsg, "Failed socket()");
WSACleanup();
//return SERVER_SOCKET_ERROR;
return 1;
} local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(8888); if ( bind(sListen, (struct sockaddr *)&local, sizeof(local)) == SOCKET_ERROR)
{
sprintf(szmsg, "socket() failed! Error: %d", WSAGetLastError());
return 1;
} listen(sListen, SOMAXCONN);
while(true)
{
int iAddrSize = sizeof(client);
sClient = accept(sListen, (struct sockaddr *)&client, &iAddrSize); if ( sClient == INVALID_SOCKET)
{
Sleep(10);
continue;
}
sprintf(szmsg, "Accepted client: %s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
hThread = AfxBeginThread(HandleLink, sClient, THREAD_PRIORITY_NORMAL, 0, 0, NULL); if ( hThread == NULL )
{
Sleep(10);
continue;
}
CloseHandle(hThread);
}
closesocket(sListen);
WSACleanup();
return 0;
}
解决方案 »
- vc console程序中是否能调用WIN32的API函数呢?
- virtual list control如何实现设定每行字体颜色、背景颜色???
- SYS驱动程序 ZwQueryInformationFile 如何得到文件盘符?
- 在vc里导入bmp问题
- 有关directshow的问题!
- 请问inplace activation的ole程序用什么调试呀?我想调试inplace activation组件
- 痛苦中 :拆分窗口问题。。。
- 有高分咯,你能要吗?
- 如何将整个文件的目录复制到另外一个目录里面?
- MFC中如何给倾斜矩形填充颜色
- 在文本文件里,是怎么读取一个一个字段的呀?比如密码表的用户名和密码!请教一下
- 在VC中怎么调试程序啊??
2、没有就加上,如果使用DIALOG向导时选择Socket就不用初始化了
3、struRcvMsg = UINT 可以作为自定义消息的参数进行传递,我估计它的作用可能是这个。这里没看到使用情况,不好说。
是个什么样的函数?好象不是用MFC的, 于是我想知道, 如果用MFC写, 会该是什么样的?