Показать сообщение отдельно

  #4  
Старый 23.02.2008, 16:23
zythar
Moderator - Level 7
Регистрация: 16.02.2008
Сообщений: 580
Провел на форуме:
1595333

Репутация: 291


Отправить сообщение для zythar с помощью ICQ
По умолчанию

несколько раз пробовал написать статью. ничего не получалось... ну не могу я статьи писать ((*

поэтому я решил делать так. я приведу листинг кода с подробными коментами. если че нибудь будет не понятно стучитесь в асю попробую объяснить.

листинг:
Код:
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <gtk/gtk.h>

GtkWidget *text;

int main(int argc, char *argv[])
{
 GtkWidget *window; //окно
 GtkWidget *button;   //кнонпки
 GtkWidget *table;     //таблица
 GtkWidget *scroll;    // полоса прокрутки

 gtk_init (&argc, &argv);
/*создаем окно*/
 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);//создаем окно
 gtk_widget_set_usize(window, 500, 600);//задаем высоту и ширину
 gtk_signal_connect(GTK_OBJECT(window), "delete_event", (GtkSignalFunc)destroy, NULL);//когда окно получит сигнал "закрыть" то выполнит функцию destroy
 gtk_container_set_border_width(GTK_CONTAINER(window), 10);
/*создали*/

/*создаеи таблицу*/
 table=gtk_table_new(100,100,TRUE);//количество столбцов, количсество колонок, все элементы таблицы равны друг другу
/*таблица создана*/

 text=gtk_text_new(NULL, NULL);//создаем поле текста
 gtk_table_attach_defaults(GTK_TABLE(table), text, 0,97,0,95);//прикрепляем поле текста к таблице
 gtk_widget_show(text);//показываем поле текста

 scroll=gtk_vscrollbar_new(GTK_TEXT (text)->vadj);//создаем полосу прокрутки и связываем ее с полем текста
 gtk_table_attach_defaults(GTK_TABLE(table), scroll, 97,100,0,95);
 gtk_widget_show(scroll);

 button=gtk_button_new_with_label("connect");//создаем кнопку
 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)client, NULL);//когда кнопка будет нажата вызовится функция client
 gtk_table_attach_defaults(GTK_TABLE(table), button, 0,50,95,100);
 gtk_widget_show(button);

 button=gtk_button_new_with_label("close");
 gtk_signal_connect(GTK_OBJECT(button), "clicked", (GtkSignalFunc)destroy, NULL);
 gtk_table_attach_defaults(GTK_TABLE(table), button, 51,100,95,100);
 gtk_widget_show(button);

 gtk_container_add(GTK_CONTAINER(window), table);//добавляем таблицу в окно
 gtk_widget_show_all(window);//показываем все что есть в окне

 gtk_main ();//цикл

 return 0;
}

void destroy(GtkWidget *widget, gpointer data)
{
 gtk_main_quit(); //выход из цикла
}

void client()
{
 int s;
 int bytes=0;
 struct sockaddr_in sa;
 char buffer[32],res[32];
 extern GtkWidget *text; //поле текста
 
 bzero(&res, 32);  
 bzero(&buffer, 32);

 s=socket(PF_INET, SOCK_STREAM, 0);

 sa.sin_family = AF_INET;
 sa.sin_port = htons(666);
 sa.sin_addr.s_addr=inet_addr("127.0.0.1");


 connect(s, (struct sockaddr *)&sa, sizeof sa);
 bytes=read(s, buffer, 32);
 close(s);
  
 gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer, strlen(buffer)); //вывводим все что получили их сокета в текстовой виджет
}
компилица все это дело так:
gcc -o выходной_файл входной_файл `gtk-config --cflags --libs`

Последний раз редактировалось zythar; 23.02.2008 в 16:30..