void CServerDlg::OnBUTTONOpen()
{
//加载WSA
// WORD wVersionRequested;
// WSADATA wsaData;
// int err;
// wVersionRequested = MAKEWORD( 2, 2 );
// err = WSAStartup( wVersionRequested, &wsaData );
// if ( err != 0 ) {
// return;
// }
// if ( LOBYTE( wsaData.wVersion ) != 2 ||
// HIBYTE( wsaData.wVersion ) != 2 ) {
// WSACleanup( );
// return;
// }
//创建端口socket
mysocket = socket(AF_INET,SOCK_STREAM,0);
if (mysocket == INVALID_SOCKET)
{
MessageBox(L"MySocket failed");
return ;
}
else
{
MessageBox(L"MySocket Success");
}
//绑定端口
sockaddr_in serversocketinfo;
serversocketinfo.sin_family = AF_INET;
serversocketinfo.sin_port = htons(10000);
serversocketinfo.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if (bind(mysocket,(sockaddr*)&serversocketinfo,sizeof(serversocketinfo))==0)
{
MessageBox(L"Bind Success");
}
else
{
MessageBox(L"Bind failed");
return ;
}
//监听
if (listen(mysocket,5)==0)
{
MessageBox(L"Listen Success");
}
else
{
MessageBox(L"Listen failed");
return ;
}
//创建连接的线程
ThreadHandleAccept = CreateThread(NULL,0,ThreadAccept,&mysocket,NULL,NULL);
//创建接收的线程
//ThreadHandleRecv = CreateThread(NULL,0,ThreadRecv,&mysocket,NULL,NULL);
}
DWORD WINAPI ThreadAccept(LPVOID lparam)
{
SOCKET *mainsocket = (SOCKET*)lparam;
SOCKET clientsocket;
sockaddr_in receiveinfo;
int size = sizeof(receiveinfo);
char *buf = new char[100];
memset(buf,0,100);
buf = "Connection Success,Welcome to Server";
while (1)
{
clientsocket = accept(*mainsocket,(sockaddr*)&receiveinfo,&size);//获取连接过来的客户机socket
send(clientsocket,buf,strlen(buf),0);
if (clientsocket != INVALID_SOCKET)
{
HANDLE ThreadHandleRecv = CreateThread(NULL,0,ThreadRecv,&clientsocket,NULL,NULL);
}
}
return 0;
}
DWORD WINAPI ThreadRecv(LPVOID lparam)
{
SOCKET *clientsocket = (SOCKET*)lparam;
char *buf = new char[1024];
CServerDlg* p = (CServerDlg*)AfxGetApp()->GetMainWnd();
while(1)
{
memset(buf,0,1024);
recv(*clientsocket,buf,1024,0);
if (buf[0] != '/0')
{
p->m_ServerEdit_val += buf;
p->SetDlgItemText(IDC_EDIT1,p->m_ServerEdit_val);
}
send(*clientsocket,"OK",2,0);
}
return 0;
}
void CServerDlg::OnBUTTONClose()
{
closesocket(mysocket);
WSACleanup();
if(TerminateThread(ThreadHandleAccept,0))
{
CloseHandle(ThreadHandleAccept);
MessageBox(L"ThreadAccept is closed!");
}
}