Есть клиент:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MAXLINE 4096 /* максимальная длина текстовой строки */
#define PORT 1234 /* Порт назначения */
int
main (int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2)
{
printf("usage: a.out <IPaddress>\n");
exit(0);
};
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) //Создание потокового сокета Интернета
{
perror("socket");
exit(0);
};
bzero(&servaddr, sizeof(servaddr)); // Инициализация структуры нулями
// Заполнение структуры servaddr
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT); // Установка номера порта
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) // Установка ip адреса, значение берётся из аргумента командной строки
{
printf("inet_pton error for %s\n", argv[1]);
exit(0);
};
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) // Установка соединения
{
printf("connect error\n");
exit(0);
};
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) // Чтение ответа сервера
{
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF) // Печатаем ответ сервера
{
printf("fputs error\n");
exit(0);
};
}
if (n < 0)
printf("read error\n");
exit(0);
}
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <unistd.h>
#include <time.h>
#define MAXLINE 4096 /* максимальная длина текстовой строки */
#define LISTENQ 1024 /* максимальное количество клиентских соединений */
int
main(int argc, char **argv)
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr;
char buf[MAXLINE];
int n;
listenfd = socket(AF_INET, SOCK_STREAM, 0); // Возвращает дескриптор созданного сокета
bzero(&servaddr, sizeof(servaddr)); // Обнуляем структуру адреса сокетов
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(1234);
bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); // Связывает сокет с локальным адресом протокола
listen(listenfd, LISTENQ); // Переводит сокет из состояния CLOSED в LISTEN, 1024 - максимальное число соединений, которые ядро может помещать в очередь сокета.
printf("я родительский процесс мой pid=%d\n", getpid());
for (;;)
{
clilen = sizeof(cliaddr);
connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen); // Сервер блокируется в вызове accept, ожидая подключения клиента. Возвращает новый
// дескриптор автоматически созданный ядром, это присоединённый сокет,
// используется для обращения к соединению TCP с конкретным клиентом.
if ( (childpid = fork()) == 0)
{
close(listenfd);
char buff[MAXLINE];
time_t ticks;
printf("Привет, я дочерний процесс и мой pid=%d\n", getpid());
ticks = time(NULL); // Получение времени в секундах
snprintf(buff, sizeof(buff), "%s", ctime(&ticks)); // ctime переделывает время в нормальный формат
write(connfd, buff, strlen(buff)); // Передача данных клиенту.
close(connfd);
exit(0);
}
close(connfd);
}
}
Но не работает(((. Клиент просто напросто ничего не выводит. Где то что то я не вижу((( Хотя думаю, что проблема в сервере.
Спасибо