Код:
#include
#include
#include
#include
#include
#include
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(windo w), 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)); //вывводим все что получили их сокета в текстовой виджет
}