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