GTK+ Serverapplikation
-
Hallo zusammen,
bin neu hier und hab auch noch nicht so wirklich viel Programmiererfahrung.
Ich hab schon bei Google zig Ergebnisse durchsucht und leider keine Lösung zu meinem Problem gefunden.Zu meinem Problem:
Ich versuche eine Serverapplikation mit GTK+ zu Programmieren. Programmiersprache ist C und ich verwende Code::Blocks unter Windows 7.
Ich habe auch schon alles so weit programmiert, allerdings verstehe ich die Thread-Programmierung nicht so wirklich. Ich will den Server starten, dann die GUI zeichnen lassen und anschließend im Netzwerk auf WinSocks "hören". Das Programm soll also dei GUI zeichnen und dann im Listem-Modus auf eine Anweisung von einem anderen Rechner aus warten.
Leider funktioniert das nicht so wie ich das will -.-Wenn ich das Programm ohen Threads starte, dann zeichnet er mir die Oberfläche, kommt allerdings nicht in den Listen-Modus. Wenn ich die Threads aktiviere kommt er in den Listen-Modus aber er zeichnet keine Oberfläche.
Ich vermute mal das liegt an der Threadprogrammierung.
Bitte bitte helft mir
Ich bin kurz vorm verzweifeln -.-
Danke schon mal im Voraus.
-
-
Thread starten
-
Sockets öffnen und accept() starten
-
Verbindung annehmen (in einem neuen Thread) abarbeiten
-
Jegliche Änderungen an der UI in den UI Thread synchronisieren
-
Threading in GTK aktivieren
-
GUI erzeugen und gtk mainloop starten
Ich persönlich bevorzuge es mit nicht blockierenden Sockets und select/etc zu arbeiten, da dann jegliches Synchronisieren oder Threading wegfällt.
-
-
Hi,
danke schonmal für die Antwort.
Wie könnte ich das denn ohne Sockets lösen? Mir is da nix eingefallen.
Ich probier mal deinen Lösungsvorschlag aus.
-
Bietet gio nicht sogar direkten Support für asynchrone Sockets? Dann kannst du damit arbeiten. Es sind weiterhin Sockets, nur führst du keine Operationen drauf auf, die blockieren. Du prüfst vorher (bzw lässt von gio prüfen), ob ein read/write/accept blocken würde. Und nur, wenn es nicht blockt, führst du es aus. Im Gegensatz zu Threads skaliert das auch recht gut für hunderte gleichzeitig aktive Verbindungen, falls du das nötig haben solltest.
-
Hi,
habe mir jetzt zwei Tage die Dokumentation zu Gio angschaut. Leider bin ich daraus nicht so ganz schlau geworden -.-
Habe dann nochmal probiert das Programm mit den Threads zum Laufen zu bekommen. er geht in die einzelnen Threads, allerdings zeichnet er mir das UI nicht dauerhaft. Es kommt ein kurzes Fenster und verschwindet dann wieder. In der Konsole steht allerdings "Thread UI". Er ruft die Funktion also auf.
Ich bin echt am Verzweifeln
Kein Plan was ich falsch mache...
Kann mir vllt jemand ein kurzes Beispielprogramm zu Gio posten (nix großes, nur damit ich anhand eines Programmes die Funktionsweise verstehen kann)?
Vielen Dank im Voraus.
-
Hallo zusammen,
ich habe immer noch Probleme mit der Serveranwendung.
Ich schaffe es zwar jetzt, dass der Server startet, die GUI zeichnet und auch vom Client Daten empfängt. Allerdings nach einmal Daten empfangen ist schluss...
Also der Server macht nix mehr und auch der Client funktioniert nicht mehr.
Ich poste mal meinen Quelltext vom Server. Vielleicht kann mir wer von euch weiterhelfen.
Ich wäre euch echt dankbar.PS: Ich weiß, dass der Quelltext nicht gerade elegant geschrieben ist, aber ich bin noch nich so lang dabei und will auch erstmal das Grundgerüst stehen haben....
#include <gtk/gtk.h> #include <gdk/gdk.h> #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> int startWinsock(void); void *print_ui( void *ptr ); void *listen_abarbeiten( void *ptr ); int vcl01=0; int vcl02=0; int vcl03=0; int vcl04=0; int vcl05=0; int vcl06=0; int vcl07=0; int vcl08=0; int vcl09=0; int vcl10=0; int i=0; long rc; SOCKET cl01; SOCKET cl02; SOCKET cl03; SOCKET cl04; SOCKET cl05; SOCKET cl06; SOCKET cl07; SOCKET cl08; SOCKET cl09; SOCKET cl10; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[1]; char buf2[50]; int durchlauf=1; GtkWidget *window; GtkWidget *image[20]; GtkWidget *table; GThread *Thread1; GThread *Thread2; char *message1 = "Thread UI"; char *message2 = "Thread LISTEN"; GError *err1 = NULL ; GError *err2 = NULL ; int main( int argc, char *argv[]) { if( !g_thread_supported() ) { g_thread_init(NULL); gdk_threads_init(); printf("g_thread supported\n"); } else { printf("g_thread NOT supported\n"); } gdk_threads_enter(); gtk_init(&argc, &argv); image[0] = gtk_image_new_from_file("lade1rot.jpg"); image[2] = gtk_image_new_from_file("lade2rot.jpg"); image[4] = gtk_image_new_from_file("lade3rot.jpg"); image[6] = gtk_image_new_from_file("lade4rot.jpg"); image[8] = gtk_image_new_from_file("lade5rot.jpg"); image[10] = gtk_image_new_from_file("lade6rot.jpg"); image[12] = gtk_image_new_from_file("lade7rot.jpg"); image[14] = gtk_image_new_from_file("lade8rot.jpg"); image[16] = gtk_image_new_from_file("lade9rot.jpg"); image[18] = gtk_image_new_from_file("lade10rot.jpg"); //WinSock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } //WinSock gestartet //Sockets erstellen acceptSocket=socket(AF_INET,SOCK_STREAM,0); cl01=socket(AF_INET,SOCK_STREAM,0); cl02=socket(AF_INET,SOCK_STREAM,0); cl03=socket(AF_INET,SOCK_STREAM,0); cl04=socket(AF_INET,SOCK_STREAM,0); cl05=socket(AF_INET,SOCK_STREAM,0); cl06=socket(AF_INET,SOCK_STREAM,0); cl07=socket(AF_INET,SOCK_STREAM,0); cl08=socket(AF_INET,SOCK_STREAM,0); cl09=socket(AF_INET,SOCK_STREAM,0); cl10=socket(AF_INET,SOCK_STREAM,0); //Sockets erstellt //Socket binden memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(12345); addr.sin_addr.s_addr=INADDR_ANY; // gewisse compiler brauchen hier ADDR_ANY rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket an port 12345 gebunden\n"); } //Socket gebunden if( (Thread1 = g_thread_create((GThreadFunc)print_ui, (void *)message1, TRUE, &err1)) == NULL) { printf("Thread UI create failed: %s!!\n", err1->message ); g_error_free ( err1 ) ; } if( (Thread2 = g_thread_create((GThreadFunc)listen_abarbeiten, (void *)message2, TRUE, &err2)) == NULL) { printf("Thread LISTEN create failed: %s!!\n", err2->message ); g_error_free ( err2 ) ; } g_thread_join(Thread1); g_thread_join(Thread2); gdk_threads_leave(); return 0; } void *print_ui(void *ptr) { char *message; g_usleep(10); message = (char *) ptr; printf("%s \n", message); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 230, 150); gtk_window_set_title(GTK_WINDOW(window), "Laderampensteuerung"); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); gtk_container_set_border_width(GTK_CONTAINER(window), 2); table = gtk_table_new (2, 5, TRUE); gtk_table_attach_defaults (GTK_TABLE(table), image[0], 0, 1, 0, 1); gtk_table_attach_defaults (GTK_TABLE(table), image[2], 1, 2, 0, 1); gtk_table_attach_defaults (GTK_TABLE(table), image[4], 2, 3, 0, 1); gtk_table_attach_defaults (GTK_TABLE(table), image[6], 3, 4, 0, 1); gtk_table_attach_defaults (GTK_TABLE(table), image[8], 4, 5, 0, 1); gtk_table_attach_defaults (GTK_TABLE(table), image[10], 0, 1, 1, 2); gtk_table_attach_defaults (GTK_TABLE(table), image[12], 1, 2, 1, 2); gtk_table_attach_defaults (GTK_TABLE(table), image[14], 2, 3, 1, 2); gtk_table_attach_defaults (GTK_TABLE(table), image[16], 3, 4, 1, 2); gtk_table_attach_defaults (GTK_TABLE(table), image[18], 4, 5, 1, 2); g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_container_add (GTK_CONTAINER(window), table); printf("UI gezeichnet\n"); gtk_widget_show_all(window); printf("gtk_main()\n"); gtk_main(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } void *listen_abarbeiten(void *ptr) { char *message; g_usleep(1); message = (char *) ptr; printf("%s \n", message); //Listen Modus rc=listen(acceptSocket,10); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("acceptSocket ist im listen Modus....\n\n"); } //Listen Modus Ende //Verbindung annehmen connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Neue Verbindung wurde akzeptiert!\n"); } //Daten tauschen while(rc!=SOCKET_ERROR) { rc=recv(connectedSocket,buf,5,0); buf[rc]='\0'; printf("Datenempfangen: %c \n", buf[0]); switch(buf[0]) { case 'A': { if(vcl01==0) { rc=bind(connectedSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 1 schon belegt!"); break; } else { vcl01=0; sprintf(buf2,"1"); image[0] = gtk_image_new_from_file("lade1rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner muss noch eingetragen werden!!!!!!!!!!!!! //rc=bind(cl01,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl01,buf2,strlen(buf2),0); //closesocket(cl01); printf("Rampe 1 erfolgreich belegt!"); break; } } case 'B': { if(vcl02==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 2 schon belegt!"); break; } else { vcl02=0; sprintf(buf2,"1"); image[1] = gtk_image_new_from_file("lade2rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner muss noch eingetragen werden!!! //rc=bind(cl02,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl02,buf2,strlen(buf2),0); //closesocket(cl02); printf("Rampe 2 erfolgreich belegt!"); break; } } case 'C': { if(vcl03==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 3 schon belegt!"); break; } else { vcl03=0; sprintf(buf2,"1"); image[2] = gtk_image_new_from_file("lade3rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner muss noch eingetragen werden!!!!! //rc=bind(cl03,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl03,buf2,strlen(buf2),0); //closesocket(cl03); printf("Rampe 3 erfolgreich belegt!"); break; } } case 'D': { if(vcl04==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 4 schon belegt!"); break; } else { vcl04=0; sprintf(buf2,"1"); image[3] = gtk_image_new_from_file("lade4rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl04,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl04,buf2,strlen(buf2),0); //closesocket(cl04); printf("Rampe 4 erfolgreich belegt!"); break; } } case 'E': { if(vcl05==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 5 schon belegt!"); break; } else { vcl05=0; sprintf(buf2,"1"); image[4] = gtk_image_new_from_file("lade5rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl05,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl05,buf2,strlen(buf2),0); //closesocket(cl05); printf("Rampe 5 erfolgreich belegt!"); break; } } case 'F': { if(vcl06==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 6 schon belegt!"); break; } else { vcl06=0; sprintf(buf2,"1"); image[5] = gtk_image_new_from_file("lade6rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl06,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl06,buf2,strlen(buf2),0); //closesocket(cl06); printf("Rampe 6 erfolgreich belegt!"); break; } } case 'G': { if(vcl07==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 7 schon belegt!"); break; } else { vcl07=0; sprintf(buf2,"1"); image[6] = gtk_image_new_from_file("lade7rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl07,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl07,buf2,strlen(buf2),0); //closesocket(cl07); printf("Rampe 7 erfolgreich belegt!"); break; } } case 'H': { if(vcl08==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 8 schon belegt!"); break; } else { vcl08=0; sprintf(buf2,"1"); image[7] = gtk_image_new_from_file("lade8rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl08,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl08,buf2,strlen(buf2),0); //closesocket(cl08); printf("Rampe 8 erfolgreich belegt!"); break; } } case 'I': { if(vcl09==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 9 schon belegt!"); break; } else { vcl09=0; sprintf(buf2,"1"); image[8] = gtk_image_new_from_file("lade9rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl09,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl09,buf2,strlen(buf2),0); closesocket(cl09); printf("Rampe 9 erfolgreich belegt!"); break; } } case 'J': { if(vcl10==0) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 10 schon belegt!"); break; } else { vcl10=0; sprintf(buf2,"1"); image[9] = gtk_image_new_from_file("lade10rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); //memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten //addr.sin_family=AF_INET; //addr.sin_port=htons(12345); // wir verwenden mal port 12345 //addr.sin_addr.s_addr=inet_addr("127.0.0.1"); // zielrechner ist unser eigener //rc=bind(cl10,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); //sprintf(buf2,"0"); //rc=send(cl10,buf2,strlen(buf2),0); //Sclosesocket(cl10); printf("Rampe 10 erfolgreich belegt!"); break; } } case 'K': { if(vcl01==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 1 schon freigegeben!"); break; } else { vcl01=1; image[0] = gtk_image_new_from_file("lade1gruen.jpg"); rc=bind(connectedSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); sprintf(buf2,"1"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 1 erfolgreich freigegeben!"); break; } } case 'L': { if(vcl01==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 1 hat schon Pause!"); break; } else { vcl01=2; sprintf(buf2,"1"); image[0] = gtk_image_new_from_file("lade1rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 1 erfolgreich in der Pause!"); break; } } case 'M': { if(vcl02==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 2 ist schon frei!"); break; } else { vcl02=1; sprintf(buf2,"1"); image[1] = gtk_image_new_from_file("lade2gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 2 erfolgreich freigegeben!"); break; } } case 'N': { if(vcl02==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 2 ist schon in der Pause!"); break; } else { vcl02=2; sprintf(buf2,"1"); image[1] = gtk_image_new_from_file("lade2rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 2 erfolgreich Pausiert!"); break; } } case 'O': { if(vcl03==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 3 ist schon frei!"); break; } else { vcl03=1; sprintf(buf2,"1"); image[2] = gtk_image_new_from_file("lade3gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 3 erfolgreich freigegeben!"); break; } } case 'P': { if(vcl03==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 3 hat schon Pause!"); break; } else { vcl03=2; sprintf(buf2,"1"); image[2] = gtk_image_new_from_file("lade3rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 3 erfolgreich Pausiert!"); break; } } case 'Q': { if(vcl04==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 4 ist schon frei!"); break; } else { vcl04=1; sprintf(buf2,"1"); image[3] = gtk_image_new_from_file("lade4gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 4 erfolgreich freigegeben!"); break; } } case 'R': { if(vcl04==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 4 hat schon Pause!"); break; } else { vcl04=2; sprintf(buf2,"1"); image[3] = gtk_image_new_from_file("lade4rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 4 erfolgreich Pausiert!"); break; } } case 'S': { if(vcl05==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 5 ist schon frei!"); break; } else { vcl05=1; sprintf(buf2,"1"); image[4] = gtk_image_new_from_file("lade5gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 5 erfolgreich freigegeben!"); break; } } case 'T': { if(vcl05==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 5 hat schon Pause!"); break; } else { vcl05=2; sprintf(buf2,"1"); image[4] = gtk_image_new_from_file("lade5rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 5 erfolgreich Pausiert!"); break; } } case 'U': { if(vcl06==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 6 ist schon freigegeben!"); break; } else { vcl06=1; sprintf(buf2,"1"); image[5] = gtk_image_new_from_file("lade6gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 6 erfolgreich freigegeben!"); break; } } case 'V': { if(vcl06==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 6 ist schon in der Pause!"); break; } else { vcl06=2; sprintf(buf2,"1"); image[5] = gtk_image_new_from_file("lade6rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 6 erfolgreich Pausiert!"); break; } } case 'W': { if(vcl07==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 7 ist schon frei!"); break; } else { vcl07=1; sprintf(buf2,"1"); image[6] = gtk_image_new_from_file("lade7gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 7 erfolgreich freigegeben!"); break; } } case 'X': { if(vcl07==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 7 ist schon in der Pause!"); break; } else { vcl07=2; sprintf(buf2,"1"); image[6] = gtk_image_new_from_file("lade7rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 7 erfolgreich Pausiert!"); break; } } case 'Y': { if(vcl08==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 8 schon frei!"); break; } else { vcl08=1; sprintf(buf2,"1"); image[7] = gtk_image_new_from_file("lade8gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 8 erfolgreich freigegeben!"); break; } } case 'Z': { if(vcl08==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 8 schon in der Pause!"); break; } else { vcl08=2; sprintf(buf2,"1"); image[7] = gtk_image_new_from_file("lade8rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 8 erfolgreich Pausiert!"); break; } } case '1': { if(vcl09==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 9 ist schon frei!"); break; } else { vcl09=1; sprintf(buf2,"1"); image[8] = gtk_image_new_from_file("lade9gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 9 erfolgreich freigegeben!"); break; } } case '2': { if(vcl09==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 9 hat schon Pause!"); break; } else { vcl09=2; sprintf(buf2,"1"); image[8] = gtk_image_new_from_file("lade9rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 9 erfolgreich Pausiert!"); break; } } case '3': { if(vcl10==1) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 10 ist schon frei!"); break; } else { vcl10=1; sprintf(buf2,"1"); image[9] = gtk_image_new_from_file("lade10gruen.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 10 erfolgreich freigegeben!"); break; } } case '4': { if(vcl10==2) { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 10 hat schon Pause!"); break; } else { vcl10=2; sprintf(buf2,"1"); image[9] = gtk_image_new_from_file("lade10rot.jpg"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Rampe 10 erfolgreich Pausiert!"); break; } } default: { sprintf(buf2,"0"); rc=send(connectedSocket,buf2,strlen(buf2),0); closesocket(connectedSocket); printf("Fehlerhaftes Kommando!"); break; } } closesocket(acceptSocket); break; } return 0; }
-
Und DAS meine Damen und Herren passiert, wenn man ohne Grundlagen sich auf das Programmieren stürzt.
Und solche Typen werden in Firmen aufgenommen...
Ohne eindeutige Fehlermeldungen können wir dir nicht helfen.
-
Super, wie hier Neulinge behandelt werden. Ich wette du wurdest als GFOP geboren, oder?
Irgendwann gibt es für alles das erste Mal. Und ich versuche mich grad an einem Programm, welches halt etwas schwieriger ist. Na und. Soll ich vor einer Herausforderung den Schwanz einziehen und davon laufen?
Klar erhoffe ich mir gerade Hilfe von jemandem, der Programmieren kann, aber vllt ist es für einen Neuling besser KONSTRUKTIVE KRITIK zu lesen, als gleich doof angemacht zu werden.Ja und, was ist daran so schlimm wenn ich in eine Firma aufgenommen werde? Das was ich da machen muss/ will hat nichts mit Programmieren zu tun.
Schon mal was vom Blick über den Tellerrand gehört? Ich versuche grade einen Blick zu riskieren, verliere aber sehr schnell wieder die Lust, wenn ich lese, was mir da an den Kopf geworfen wird.BTT: Es erscheint keine Fehlermeldung. Und vllt ist ja Jemand da, der mir mit konstruktiver Kritik helfen möchte.
Vielen Dank im Voraus!
-
smirage schrieb:
Zu meinem Problem:
Ich versuche eine Serverapplikation mit GTK+ zu Programmieren. Programmiersprache ist C und ich verwende Code::Blocks unter Windows 7.
Ich habe auch schon alles so weit programmiert, allerdings verstehe ich die Thread-Programmierung nicht so wirklich. Ich will den Server starten, dann die GUI zeichnen lassen und anschließend im Netzwerk auf WinSocks "hören". Das Programm soll also dei GUI zeichnen und dann im Listem-Modus auf eine Anweisung von einem anderen Rechner aus warten.
Leider funktioniert das nicht so wie ich das will -.-[...]
Bitte bitte helft mir
Ich bin kurz vorm verzweifeln -.-
Danke schon mal im Voraus.
Das wae Dein Eingangsthread... ok ... Es funktioniert also nicht, wie Du das willst...
Was funktioniert nicht so, wie Du es willst?? Was für eine Meldung kommt?? usw...Du hast jetzt etwa 1000 Lines of Code gepostet (unkommentiert) und erwartest, dass wir das jetzt analysieren??
Wir wissen ja nicht einmal, was Deine Serverapplikation machen soll.... Beschreibe das doch mal etwas genauer.
Und - versuche doch einfach einmal Dein Problem zu konkretisieren...