有阻塞的程序,部分,不好意思 =============================================server void CSeverClientDlg::OnButton_ThreadOn() { UpdateData(true);//刷新端口 if(m_edit_Port=="") { AfxMessageBox("请输入端口"); } else { port=atoi(m_edit_Port); deal(); } } void CSeverClientDlg::deal(){ CString linkPort="["+m_edit_Port+"]"; CString nowPing; if(IsListening==true) { AfxMessageBox("已经在监听"); } else { ServerSocket=socket(AF_INET,SOCK_STREAM,0); ClientSocket=socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in ServerAddr; if( ClientSocket == -1 ) { AfxMessageBox( "accept调用失败!\n" ); exit( 0 ); } ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(port);//监视的端口号2008 ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);//本地IP if( (bind(ServerSocket,( struct sockaddr *)&ServerAddr,sizeof(ServerAddr))) <0) { AfxMessageBox("bind failed!"); } if (listen(ServerSocket,5) < 0) { AfxMessageBox("listen error"); } if(WSAAsyncSelect(ServerSocket,m_hWnd,WM_MY_MSG,FD_WRITE|FD_CLOSE|FD_READ|FD_ACCEPT)==0) AfxMessageBox("已经开始监听端口 :"+linkPort); nowPing="打开端口并开始监听\r\n"; m_edit_Ping+=nowPing; UpdateData(false); IsListening=true; }//if } void CSeverClientDlg::OnButton_Cut_Listen(){ if(IsListening==false) { AfxMessageBox("目前没有监听"); } else { IsListening=false; m_edit_Ping+="已经断开监听了\r\n"; UpdateData(false); send(ClientSocket,"2",strlen("2")+1,0); closesocket(ServerSocket); closesocket(ClientSocket); }} LRESULT CSeverClientDlg::OnMyMessage(WPARAM wParam,LPARAM lParam){ int nLength; int numbytes; char buf[ MAXDATASIZE ]; CString str,str2; CEdit * pEdit; CString rPeerAddress; CString cport; //switch switch(LOWORD(lParam)) { case FD_READ: numbytes = recv( ClientSocket, buf, MAXDATASIZE, 0 );//recv接收 if( numbytes == -1 ) { AfxMessageBox( "recv失败!" ); WSACleanup( ); exit( 0 ); } buf[ numbytes ] = '\0'; str.Format("%s",buf); str+="\r\n"; pEdit=(CEdit*)GetDlgItem(IDC_EDIT2); pEdit->GetWindowText(str2); str2+=str;; pEdit->SetWindowText(str2); pEdit->SetSel(str2.GetLength(), str2.GetLength()); break; case FD_WRITE: break; case FD_ACCEPT: { struct sockaddr_in ClientAddr; int sin_size = sizeof( struct sockaddr_in ); ClientSocket = accept( ServerSocket, ( struct sockaddr * )&ClientAddr, &sin_size ); m_edit_Ping+="________________________有客户端连接上_________________________\r\n"; rPeerAddress=inet_ntoa(ClientAddr.sin_addr); cport.Format("%u",ntohs(ClientAddr.sin_port)); m_edit_Ping+="客户端的IP为 :"+rPeerAddress; m_edit_Ping+="客户端端口为 :"+cport+"\r\n"; UpdateData(false); send(ClientSocket,"1",strlen("1")+1,0); break; } }//switch return 0; } ======================================================client void CClientSocketDlg::OnBUTTONRequest() { CString str; if(IsRequest==true) { AfxMessageBox("已经连接了."); } else { UpdateData(true); if(m_edit_IP=="") { AfxMessageBox("请输入IP,在IP框里面."); } else { if(m_edit_Port=="") { AfxMessageBox("请输入端口,在端口框输入."); } else { IsRequest=true; IP =m_edit_IP; Port=atoi(m_edit_Port); deal(); } } }//if(isR......) } void CClientSocketDlg::deal(){// SOCKET ClientSocket; ClientSocket=socket(PF_INET,SOCK_STREAM,0); struct sockaddr_in ServerAddr;// int numbytes;// char buf[ MAXDATASIZE ]; CString str; ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(Port); ServerAddr.sin_addr.s_addr = inet_addr(IP); memset( &( ServerAddr.sin_zero ), 0, sizeof(ServerAddr.sin_zero ) ); if(ClientSocket<0) { AfxMessageBox("Client failed!"); } if( connect( ClientSocket, (struct sockaddr *) & ServerAddr, sizeof(struct sockaddr)) == -1 ) { AfxMessageBox("请查看服务器端端口是否打开"); WSACleanup( ); exit( 0 ); } else { m_edit_TrueOrFalse="连接成功!"; UpdateData(false); } WSAAsyncSelect(ClientSocket,m_hWnd,WM_MESSAGE1,FD_WRITE|FD_CLOSE|FD_READ|FD_ACCEPT); // closesocket( ClientSocket );// WSACleanup( ); } void CClientSocketDlg::OnBUTTONCutDown() { if(closesocket(ClientSocket)==0) { m_edit_TrueOrFalse="已经断开连接"; IsRequest=false; UpdateData(false); } } void CClientSocketDlg::OnBUTTONSend() { CString str; UpdateData(true); if(m_edit_Send=="") { AfxMessageBox("内容不为空."); } else { UpdateData(true); send(ClientSocket,m_edit_Send,strlen(m_edit_Send)+1,0); m_edit_Send=""; UpdateData(false); } } LRESULT CClientSocketDlg::DoMyMessage(WPARAM wParam,LPARAM lParam){ int numbytes; char buf[ MAXDATASIZE ]; CString str; int i; switch(LOWORD(lParam)) { case FD_READ: numbytes = recv( ClientSocket, buf, MAXDATASIZE, 0 );//recv接收 if( numbytes == -1 ) { AfxMessageBox( "recv失败!" ); WSACleanup( ); exit( 0 ); } buf[ numbytes ] = '\0'; if(CString(buf)==CString("1")) { m_edit_Accept="谢谢你的连接"; } else if(CString(buf)==CString("2")) { m_edit_Accept="服务器端已经断开连接,请不要在此时进行连接,否则程序自动退出"; IsRequest=false; closesocket(ClientSocket); } UpdateData(false); break; case FD_WRITE:break; case FD_ACCEPT:break; default: break; } return 0;}

评论