我才学网络编程呢。请多多指教。
创建MFC时勾选了windows socket, 然后创建一个启动按钮。以下是启动按钮的代码
void CServertestDlg::start()
{
// TODO: Add your control notification handler code here
HANDLE hThread;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveData,this,NULL,&idThread);
} UINT ReceiveData(LPVOID pParam) {
CServertestDlg *dlg=(CServertestDlg*)pParam;
CSocket server;
if(server.Create(9000,SOCK_DGRAM,NULL)==0)
{
AfxMessageBox("创建Socket失败");
return -1;
}
for(;;)
{
sockaddr_in clientaddr;
int clientaddrlen=sizeof(clientaddr);
char echobuffer[1024];
int recvmsgsize=server.ReceiveFrom(echobuffer,1024,(SOCKADDR*)&clientaddr,&clientaddrlen,0);
if(recvmsgsize<=0)
{
AfxMessageBox("RecvFrom() failed"); }
echobuffer[recvmsgsize]='\0';
dlg->m_edit.ReplaceSel(echobuffer);
server.Close();
}
}运行后出现C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(177) : error C2065: 'ReceiveData' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(177) : error C2664: 'CreateThread' : cannot convert parameter 6 from 'void ** ' to 'unsigned long *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(182) : error C2373: 'ReceiveData' : redefinition; different type modifiers
执行 cl.exe 时出错.
创建MFC时勾选了windows socket, 然后创建一个启动按钮。以下是启动按钮的代码
void CServertestDlg::start()
{
// TODO: Add your control notification handler code here
HANDLE hThread;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveData,this,NULL,&idThread);
} UINT ReceiveData(LPVOID pParam) {
CServertestDlg *dlg=(CServertestDlg*)pParam;
CSocket server;
if(server.Create(9000,SOCK_DGRAM,NULL)==0)
{
AfxMessageBox("创建Socket失败");
return -1;
}
for(;;)
{
sockaddr_in clientaddr;
int clientaddrlen=sizeof(clientaddr);
char echobuffer[1024];
int recvmsgsize=server.ReceiveFrom(echobuffer,1024,(SOCKADDR*)&clientaddr,&clientaddrlen,0);
if(recvmsgsize<=0)
{
AfxMessageBox("RecvFrom() failed"); }
echobuffer[recvmsgsize]='\0';
dlg->m_edit.ReplaceSel(echobuffer);
server.Close();
}
}运行后出现C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(177) : error C2065: 'ReceiveData' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(177) : error C2664: 'CreateThread' : cannot convert parameter 6 from 'void ** ' to 'unsigned long *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
C:\Program Files\Microsoft Visual Studio\MyProjects\Servertest\ServertestDlg.cpp(182) : error C2373: 'ReceiveData' : redefinition; different type modifiers
执行 cl.exe 时出错.
LPVOID lpParameter // thread data
);void CServertestDlg::start()
{
// TODO: Add your control notification handler code here
HANDLE hThread;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveData,this,NULL,&idThread);
} DWORD WINAPI ReceiveData(LPVOID lpParameter) {
CServertestDlg *dlg=(CServertestDlg*)pParam;
CSocket server;
if(server.Create(9000,SOCK_DGRAM,NULL)==0)
{
AfxMessageBox("创建Socket失败");
return -1;
}
for(;;)
{
sockaddr_in clientaddr;
int clientaddrlen=sizeof(clientaddr);
char echobuffer[1024];
int recvmsgsize=server.ReceiveFrom(echobuffer,1024,(SOCKADDR*)&clientaddr,&clientaddrlen,0);
if(recvmsgsize<=0)
{
AfxMessageBox("RecvFrom() failed"); }
echobuffer[recvmsgsize]='\0';
dlg->m_edit.ReplaceSel(echobuffer);
server.Close();
}
}
LPVOID lpParameter // thread data
);void CServertestDlg::start()
{
// TODO: Add your control notification handler code here
HANDLE hThread;
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveData,this,NULL,&idThread);
} DWORD WINAPI ReceiveData(LPVOID lpParameter) {
CServertestDlg *dlg=(CServertestDlg*)pParam;
CSocket server;
if(server.Create(9000,SOCK_DGRAM,NULL)==0)
{
AfxMessageBox("创建Socket失败");
return -1;
}
for(;;)
{
sockaddr_in clientaddr;
int clientaddrlen=sizeof(clientaddr);
char echobuffer[1024];
int recvmsgsize=server.ReceiveFrom(echobuffer,1024,(SOCKADDR*)&clientaddr,&clientaddrlen,0);
if(recvmsgsize<=0)
{
AfxMessageBox("RecvFrom() failed"); }
echobuffer[recvmsgsize]='\0';
dlg->m_edit.ReplaceSel(echobuffer);
server.Close();
}
}
DWORD idThread,然后hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveData,this,NULL,(LPDWORD)&idThread);
这样吗?