Суббота
23.09.2017
15:58
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта

Категории каталога
Web [2]
Статьи по Web-программированию.
Системное и прикладное [4459]

Начало » Статьи » Программирование » Системное и прикладное

[для новичков]сетевое программирование на си под unix: часть 3. графический клиент
несколько раз пробовал написать статью. ничего не получалось... ну не могу я статьи писать ((*

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

листинг:
Код:

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


компилица все это дело так:
gcc -o выходной_файл входной_файл `gtk-config --cflags --libs`
Категория: Системное и прикладное | Добавил: zythar (26.03.2008) | Автор: zythar
Просмотров: 1331 | Рейтинг: 4.0 |

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вход

Поиск по каталогу



Кто сейчас на сайте:
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Друзья сайта

Статистика


Copyright KulX © 2007
ВНИМАНИЕ:Администрация не несет ответственности за публикуемые авторами материалы!
Хостинг от uCoz