Socket Programm laggt brutal



  • hi,
    hier der Client:( bzw nur dei Dialogprozedur)

    case WM_INITDIALOG:
    	     _beginthread(Thead, 0, 0); // sehr kleine aufgabe
    	  	 if(WSAStartup(MAKEWORD(2,0), &wsa) != 0)
    		 {
    	         MessageBox(0, TEXT("Winsock konnte nicht gestartet werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    	     s = socket(AF_INET, SOCK_STREAM, 0);
    		 if(s == INVALID_SOCKET) 
    		 {
    	         MessageBox(0, TEXT("Socket konnte nicht erstellt werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    		 memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 
    		 addr.sin_family=AF_INET;
    		 addr.sin_port=htons(40791); // wir verwenden mal port 40791
    		 rc=getAddrFromString("hostname",&addr);
    		 if(rc==SOCKET_ERROR)
    	     {
    	         MessageBox(0, TEXT("IP konnte nicht aufgelöst werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    	     }
        	 if(connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)) == SOCKET_ERROR) 
    		 {
    	         MessageBox(0, TEXT("Konnte nicht verbinden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    		 return TRUE;
    
    	case WM_COMMAND:
    		 switch(LOWORD(wParam))
    		 {
    		 case IDC_BUTTON1:
    			  if(lstrlen(szNick) != 0)
    			  {
    			  GetDlgItemText(hDlg, IDC_EDIT1, szBuffer, 10000); // speichert Text aus Editfeld1
    			  if(lstrlen(szBuffer) != 0)
    			  {
    			      strcat(szOutput, szBuffer);				  
    				  SetDlgItemText(hDlg, IDC_EDIT2, szOutput);	
    				  strcat(szOutput, TEXT("\r\n"));	
    				  strcat(szOutput, szNick);	
    				  strcat(szOutput, TEXT(":\r\n"));	
    				  SetDlgItemText(hDlg, IDC_EDIT1, TEXT(""));
    			  }
    			  }
    			  else
    			      MessageBox(0, TEXT("Kein Nickname ausgewählt"), szAppName, MB_ICONERROR);
    			  return TRUE;
    
    		 case IDC_EDIT1:
    			  return TRUE;
    
    		 case IDC_EDIT3:
    			  GetDlgItemText(hDlg, IDC_EDIT3, szNick, 40);
    			  strcpy(szOutput, szNick);
    			  strcat(szOutput, TEXT(":\r\n"));
    			  return TRUE;
    
    		 case IDCANCEL:
    			  EndDialog(hDlg, 0);
    			  return TRUE;
    
    		 }
    		 return TRUE;
    
    	}
    	return FALSE;
    }
    

    Und der Server:

    switch(message)
    	{
    	case WM_INITDIALOG:
    	     _beginthread(Thead, 0, 0); // sehr kleine aufgabe
    	  	 if(WSAStartup(MAKEWORD(2,0), &wsa) != 0)
    		 {
    	         MessageBox(0, TEXT("Socket konnte nicht gestartet werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    	     acceptSocket = socket(AF_INET,SOCK_STREAM,0);
    	     if(acceptSocket==INVALID_SOCKET)
    		 {
    	         MessageBox(0, TEXT("Socket konnte nicht erstellt werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    		 memset(&addr,0,sizeof(SOCKADDR_IN));
    		 addr.sin_family=AF_INET;
    		 addr.sin_port=htons(40791);
    		 addr.sin_addr.s_addr=INADDR_ANY;
    
    	     if(bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)) == SOCKET_ERROR)
    		 {
    	         MessageBox(0, TEXT("Socket konnte nicht gebindet werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    		 if(listen(acceptSocket,10)==SOCKET_ERROR)
    		 {
    	         MessageBox(0, TEXT("listen ist fehlgeschlagen"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    
    		 connectedSocket=accept(acceptSocket,NULL,NULL);
    		 if(connectedSocket==INVALID_SOCKET)
    		 {
    	         MessageBox(0, TEXT("Socket konnte nicht akzeptiert werden"), szAppName, MB_ICONERROR);
    			 SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
    		 }
    		 return TRUE;
    
    	case WM_COMMAND:
    		 switch(LOWORD(wParam))
    		 {
    		 case IDC_BUTTON1:
    			  if(lstrlen(szNick) != 0)
    			  {
    			  GetDlgItemText(hDlg, IDC_EDIT1, szBuffer, 10000); // speichert Text aus Editfeld1
    			  if(lstrlen(szBuffer) != 0)
    			  {
    			      strcat(szOutput, szBuffer);				  
    				  SetDlgItemText(hDlg, IDC_EDIT2, szOutput);	
    				  strcat(szOutput, TEXT("\r\n"));	
    				  strcat(szOutput, szNick);	
    				  strcat(szOutput, TEXT(":\r\n"));	
    				  SetDlgItemText(hDlg, IDC_EDIT1, TEXT(""));
    			  }
    			  }
    			  else
    			      MessageBox(0, TEXT("Kein Nickname ausgewählt"), szAppName, MB_ICONERROR);
    			  return TRUE;
    
    		 case IDC_EDIT1:
    			  return TRUE;
    
    		 case IDC_EDIT3:
    			  GetDlgItemText(hDlg, IDC_EDIT3, szNick, 40);
    			  strcpy(szOutput, szNick);
    			  strcat(szOutput, TEXT(":\r\n"));
    			  return TRUE;
    
    		 case IDCANCEL:
    			  EndDialog(hDlg, 0);
    			  return TRUE;
    
    		 }
    		 return TRUE;
    
    	}
    	return FALSE;
    }
    

    Beide Programme haben zur Laufzeit 50% der Prozessleistung(also zusammen 100)
    woran kann das liegen?



  • was soll das darstellen. nonblocking, asynchrone sockets etc.



  • ja ich will vom client ne verbindung zum server machen


Anmelden zum Antworten