Ч
ЕЛЯБИНСК,
ЮУ
Р
ГУ
,
ИЕТН
Назад
Начало
Учебные материалы
Полезные библиотеки
Подразделы
Другие разделы
Библиотека для графических интерфейсов nuklear
Графическая библиотека
Консольный ввод-вывод coniow
Консольный ввод-вывод curses
Распараллеливание программ
Управляющие последовательности
Файловая система
Дата и время
21/11/2024 19:35:42
Авторизация
Имя:
Пароль:
Вход
Зарегистрироваться
Восстановить пароль
Передача данных по сети
Инициализация
Клиент
Сервер
Сервер
Программа для сервера в случае, если клиент отправляет 1 сообщение
```c
int srv_func(void*)
{
// Создать канал как сервер
SOCKET s=create_socket("127.0.0.1",12345,SERVER);
if(s==INVALID_SOCKET) return 1;
char message[]="Answer message";
while(1)
{
// ждать подключения клиента
SOCKET c=accept(s,NULL,NULL);
int sz;
char buf[1024];
// принять сообщение
if((sz = recv(c, buf, sizeof(buf), 0))>0) {
// обработка принятого сообщения
for(int i=0;i<sz;++i)
putchar(buf[i]);
}
// Передать ответ
send(c, message, strlen(message), 0);
// завершить передачу
shutdown(c, SD_SEND);
// закрыть канал клиента
closesocket(c);
}
// закрыть канал сервера
closesocket(s);
}
```
Вариант сервера для взаимодействия в цикле до завершения передачи клиентом:
```c
int srv_func(void*)
{
SOCKET s=create_socket("127.0.0.1",12345,SERVER);
if(s==INVALID_SOCKET) return 1;
while(1)
{
// ждать подключения клиента
SOCKET c=accept(s,NULL,NULL);
int sz;
char buf[1024];
// принять сообщение (до завершения)
while((sz = recv(c, buf, sizeof(buf), 0))>0) {
buf[sz]=0;
printf("%s\n",buf);
char message[1000]="Hello ";
strcpy(message+6,buf);
// Передать ответ
send(c, message, strlen(message), 0);
}
// завершить передачу
shutdown(c, SD_SEND);
// закрыть канал клиента
closesocket(c);
}
// закрыть канал сервера
closesocket(s);
}
```
Запускать сервер нужно либо в отдельной программы, либо в отдельном потоке:
```c
#include <threads.h>
int main()
{
thrd_t srv_thrd;
thrd_create(&srv_thrd,srv_func,NULL);
// остальные действия в программе
}
```