Нужен работающий пример демонстрации технологии КЛИЕНТ-СЕРВЕР на чистом Си, чтобы использовался новый адресный интернет стандарт IPv6.
Скиньте плиз кто может.
C/C++
Срочно нужен пример технологии КЛИЕНТ-СЕРВЕР на чистом Си с применением IPv6
Вот примерчик сервера, будет работать на Linux и на Android, ибо инклуды стандартные для nix ОС. После компиляции запускай с консоли так:
./myserver & больший_номер_pid . ОС поругается немного и присвоит свой pid, который по факту свободен:
#includ<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<ctype.h>
#define BUF_SIZE 10
#define PORT_NUM 50002
int main(int argc, char *argv[])
{
struct sockaddr_in6 svaddr, claddr;
int sfd, j;
ssize_t numBytes;
socklen_t len;
char buf[BUF_SIZE];
char claddrStr[INET6_ADDRSTRLEN];
sfd = socket(AF_INET6, SOCK_DGRAM, 0);
if (sfd == -1)
perror("socket");
memset(&svaddr, 0, sizeof(struct sockaddr_in6));
svaddr.sin6_family = AF_INET6;
svaddr.sin6_addr = in6addr_any;
/* Универсальный адрес */
svaddr.sin6_port = htons(PORT_NUM);
if (bind(sfd, (struct sockaddr *) &svaddr,
sizeof(struct sockaddr_in6)) == -1)
perror("bind");
/* Получаем сообщения, переводим их в верхний
регистр и возвращаем клиенту */
for (;;)
{
len = sizeof(struct sockaddr_in6);
numBytes = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);
if (numBytes == -1)
perror("recvfrom");
if (inet_ntop(AF_INET6, &claddr.sin6_addr, claddrStr,
INET6_ADDRSTRLEN) == NULL)
printf("Couldn't convert client address to string\n");
else
printf("Server received %ld bytes from (%s, %u)\n", (long) numBytes, claddrStr, ntohs(claddr.sin6_port));
for (j = 0; j < numBytes; j++)
buf[j] = toupper((unsigned char) buf[j]);
if (sendto(sfd, buf, numBytes, 0, (struct sockaddr *)
&claddr, len) != numBytes)
perror("sendto");
}
}
А здесь пример клиента. Клиент запускай так: ./myclient ::1 message, где ::1 по IPv6 означает 127.0.0.1, а message это запрос клиента серверу:
#includ<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<ctype.h>
#define BUF_SIZE 10
#define PORT_NUM 50002
int main(int argc, char *argv[])
{
struct sockaddr_in6 svaddr;
int sfd, j;
size_t msgLen;
ssize_t numBytes;
char resp[BUF_SIZE];
if (argc < 3 || strcmp(argv[1], "--help") == 0)
perror("%s host-address msg...\n", argv[0]);
sfd = socket(AF_INET6,
SOCK_DGRAM, 0);
/* Создаем клиентский сокет */
if (sfd == -1)
perror("socket");
memset(&svaddr, 0,
sizeof(struct sockaddr_in6));
svaddr.sin6_family = AF_INET6;
svaddr.sin6_port = htons(PORT_NUM);
if (inet_pton(AF_INET6, argv[1],
&svaddr.sin6_addr) <= 0)
perror("inet_pton failed for address '%s'", argv[1]);
/* Отправляем сообщения
серверу; направляем ответы
в стандартный вывод */
for (j = 2; j < argc; j++)
{
msgLen = strlen(argv[j]);
if (sendto(sfd, argv[j],
msgLen, 0, (struct sockaddr *)
&svaddr,
sizeof(struct sockaddr_in6))
!= msgLen)
perror("sendto");
numBytes = recvfrom(sfd, resp,
BUF_SIZE, 0, NULL, NULL);
if (numBytes == -1)
perror("recvfrom");
printf("Response %d: %.*s\n", j - 1,
(int) numBytes, resp);
}
exit(0);
}

./myserver & больший_номер_pid . ОС поругается немного и присвоит свой pid, который по факту свободен:
#includ<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<ctype.h>
#define BUF_SIZE 10
#define PORT_NUM 50002
int main(int argc, char *argv[])
{
struct sockaddr_in6 svaddr, claddr;
int sfd, j;
ssize_t numBytes;
socklen_t len;
char buf[BUF_SIZE];
char claddrStr[INET6_ADDRSTRLEN];
sfd = socket(AF_INET6, SOCK_DGRAM, 0);
if (sfd == -1)
perror("socket");
memset(&svaddr, 0, sizeof(struct sockaddr_in6));
svaddr.sin6_family = AF_INET6;
svaddr.sin6_addr = in6addr_any;
/* Универсальный адрес */
svaddr.sin6_port = htons(PORT_NUM);
if (bind(sfd, (struct sockaddr *) &svaddr,
sizeof(struct sockaddr_in6)) == -1)
perror("bind");
/* Получаем сообщения, переводим их в верхний
регистр и возвращаем клиенту */
for (;;)
{
len = sizeof(struct sockaddr_in6);
numBytes = recvfrom(sfd, buf, BUF_SIZE, 0, (struct sockaddr *) &claddr, &len);
if (numBytes == -1)
perror("recvfrom");
if (inet_ntop(AF_INET6, &claddr.sin6_addr, claddrStr,
INET6_ADDRSTRLEN) == NULL)
printf("Couldn't convert client address to string\n");
else
printf("Server received %ld bytes from (%s, %u)\n", (long) numBytes, claddrStr, ntohs(claddr.sin6_port));
for (j = 0; j < numBytes; j++)
buf[j] = toupper((unsigned char) buf[j]);
if (sendto(sfd, buf, numBytes, 0, (struct sockaddr *)
&claddr, len) != numBytes)
perror("sendto");
}
}
А здесь пример клиента. Клиент запускай так: ./myclient ::1 message, где ::1 по IPv6 означает 127.0.0.1, а message это запрос клиента серверу:
#includ<netinet/in.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<ctype.h>
#define BUF_SIZE 10
#define PORT_NUM 50002
int main(int argc, char *argv[])
{
struct sockaddr_in6 svaddr;
int sfd, j;
size_t msgLen;
ssize_t numBytes;
char resp[BUF_SIZE];
if (argc < 3 || strcmp(argv[1], "--help") == 0)
perror("%s host-address msg...\n", argv[0]);
sfd = socket(AF_INET6,
SOCK_DGRAM, 0);
/* Создаем клиентский сокет */
if (sfd == -1)
perror("socket");
memset(&svaddr, 0,
sizeof(struct sockaddr_in6));
svaddr.sin6_family = AF_INET6;
svaddr.sin6_port = htons(PORT_NUM);
if (inet_pton(AF_INET6, argv[1],
&svaddr.sin6_addr) <= 0)
perror("inet_pton failed for address '%s'", argv[1]);
/* Отправляем сообщения
серверу; направляем ответы
в стандартный вывод */
for (j = 2; j < argc; j++)
{
msgLen = strlen(argv[j]);
if (sendto(sfd, argv[j],
msgLen, 0, (struct sockaddr *)
&svaddr,
sizeof(struct sockaddr_in6))
!= msgLen)
perror("sendto");
numBytes = recvfrom(sfd, resp,
BUF_SIZE, 0, NULL, NULL);
if (numBytes == -1)
perror("recvfrom");
printf("Response %d: %.*s\n", j - 1,
(int) numBytes, resp);
}
exit(0);
}

Не нужен, спасибо.
Юра Барбирош
И слава Богу. А то он заебется его для тебя писать, бедный, на чистом-то Си.
Похожие вопросы
- На что следует обращать внимание при разработке крупной системы на чистом Си?
- Какие программы имеет смысл писать на чистом Си сегодня?
- Срочно нужна помощь (Дана строка, содержащая зашифрованный русский текст. решить нужно на с++
- Срочно нужна помощь Найти произведение элементов кратных 7
- Срочно нужен код программы на С++
- С++ Нужен пример функции Шейкерной сортировки для новичка
- ГОСПОДА, нужна помощь по Си!
- Правда ли, что язык Си - это язык мертвый и никому не нужный, а Си++ - это кривое костыльное ООП, которое скоро умрет?
- Программирование, нужна помощь в решение задачи! На си или си++
- Актуальность Си и Си++
Здесь скрин с запуском. Показано, как ОС присвоила процессу сервера свой свободный номер 19024.
Чтобы узнать, какие номера процессов заняты, набери в консоли команду top -n 5. Увидишь иаксимальный номер процесса и выберешь для сервера любой номер pid, который больше текущего самого максимального.