- 論壇徽章:
- 0
|
下面的代碼是我更改 gtk教材中的代碼 想實現(xiàn)本機的udp通信的
編譯通過 但是 sendto 和 recvfrom都沒有什么反應(yīng) 請各位幫幫忙看看
我覺得主要就是
void *recvbuf()
void *sendbuffer()
OnRun這三個函數(shù) 其實沒有什么的 怎么會不行呢
- #include <stdio.h>;
- #include <string.h>;
- #include <sys/types.h>;
- #include <stdlib.h>;
- #include <unistd.h>;
- #include <sys/socket.h>;
- #include <netinet/in.h>;
- #include <arpa/inet.h>;
- #include <pthread.h>;
- #include <time.h>;
- #include <gtk/gtk.h>;
- /* Our new improved callback. The data passed to this function
- * is printed to stdout. */
- int socketid;
- void *recvbuf()
- {
- struct sockaddr_in my_addr;
- int addrlen;
- char buffer[10];
- int periodic;
- memset(&my_addr,0,sizeof(struct sockaddr_in));
- my_addr.sin_family = AF_INET;
- my_addr.sin_port = htons(7802);
- my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addrlen = sizeof(my_addr);
- periodic = 0;
- for(;;)
- {
- sprintf(buffer,"%d",periodic);
- sendto(socketid, buffer, sizeof(int), 0,(struct sockaddr *)&my_addr, addrlen);
- periodic++;
- }
- }
- void *sendbuffer()
- {
- struct sockaddr_in my_addr;
- char buffer[10];
- int addrlen;
- printf("test!!!");
- memset(&my_addr,0,sizeof(struct sockaddr_in));
- my_addr.sin_family = AF_INET;
- my_addr.sin_port = htons(7802);
- my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
- addrlen = sizeof(my_addr);
- for(;;)
- {
- printf("test!!!");
- recvfrom(socketid, buffer, sizeof(int), 0,(struct sockaddr *)&my_addr, &addrlen);
-
- printf("%s\n", buffer);
-
-
- }
- }
- void OnRun( GtkWidget *widget,
- gpointer data )
- {
- int rc;
- pthread_t threadid;
- socketid = socket(AF_INET, SOCK_DGRAM, 0);
- if (socketid < 0)
- {
- perror("create socket error");
- exit (1);
- }
- rc = pthread_create(&threadid, NULL, sendbuffer, NULL);
- pthread_create(&threadid, NULL, recvbuf,NULL);
- for(;;);
-
- pthread_exit(NULL);
- }
- /* another callback */
- gint delete_event( GtkWidget *widget,
- GdkEvent *event,
- gpointer data )
- {
- gtk_main_quit ();
- return FALSE;
- }
- int main( int argc,
- char *argv[] )
- {
- /* GtkWidget is the storage type for widgets */
- GtkWidget *window;
- GtkWidget *button;
- GtkWidget *stopbutton;
- GtkWidget *box1;
- /* This is called in all GTK applications. Arguments are parsed
- * from the command line and are returned to the application. */
- gtk_init (&argc, &argv);
- /* Create a new window */
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- /* This is a new call, which just sets the title of our
- * new window to "Hello Buttons!" */
- gtk_window_set_title (GTK_WINDOW (window), "Hello Buttons!");
- /* Here we just set a handler for delete_event that immediately
- * exits GTK. */
- g_signal_connect (G_OBJECT (window), "delete_event",
- G_CALLBACK (delete_event), NULL);
- /* Sets the border width of the window. */
- gtk_container_set_border_width (GTK_CONTAINER (window), 10);
- /* We create a box to pack widgets into. This is described in detail
- * in the "packing" section. The box is not really visible, it
- * is just used as a tool to arrange widgets. */
- box1 = gtk_hbox_new (FALSE, 0);
- /* Put the box into the main window. */
- gtk_container_add (GTK_CONTAINER (window), box1);
- /* Creates a new button with the label "Button 1". */
- button = gtk_button_new_with_label ("start");
-
- /* Now when the button is clicked, we call the "callback" function
- * with a pointer to "button 1" as its argument */
- g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (OnRun), NULL);
- /* Instead of gtk_container_add, we pack this button into the invisible
- * box, which has been packed into the window. */
- gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);
- /* Always remember this step, this tells GTK that our preparation for
- * this button is complete, and it can now be displayed. */
- gtk_widget_show (button);
- /* Do these same steps again to create a second button */
- stopbutton = gtk_button_new_with_label ("stop");
- /* Call the same callback function with a different argument,
- * passing a pointer to "button 2" instead. */
- g_signal_connect (G_OBJECT (stopbutton), "clicked",
- G_CALLBACK (OnRun), NULL);
- gtk_box_pack_start(GTK_BOX (box1), stopbutton, TRUE, TRUE, 0);
- /* The order in which we show the buttons is not really important, but I
- * recommend showing the window last, so it all pops up at once. */
- gtk_widget_show (stopbutton);
- gtk_widget_show (box1);
- gtk_widget_show (window);
-
- /* Rest in gtk_main and wait for the fun to begin! */
- gtk_main ();
- return 0;
- }
復(fù)制代碼 |
|