Я пытаюсь отправить сообщение с клиента на сервер и что-бы сервер вывел это сообщение:
Есть такой код сервера
//server for Linux
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <clocale>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
setlocale(LC_ALL, "Russian");
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sa; //структура для bind
sa.sin_family = AF_INET; //дублируем домен
sa.sin_port = htons(12345); //указываем порт,
//функция htons приводит к сетевому порядку байт
sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); //тут мы указываем локальный IP-адрес
bind(sock, (struct sockaddr *)&sa, sizeof(sa)); //привязали сокет
listen(sock, SOMAXCONN); //слушаем
//SOMAXCONN - максимальная длинна очереди
//теперь мы должны начать принимать соединения
char buff[32] = "default";
std::cout << "Начинаем слушать\n";
while(int s1 = accept(sock, 0, 0)) //принимаем соединения для работы с ними
{
std::cout << "Поймали\n";
int k = recv(sock, &buff, sizeof(buff), MSG_NOSIGNAL);
std::cout << "k = " << k << "\n";
if(k == -1)
std::cout << "Какая-то ошибка...\n";
if(!k)
std::cout << "Отсутствии записанных в сокет процессом-поставщиком данных\n";
if(k > 0)
std::cout << "Сообщение: " << buff << "\n";
}
printf("Работа завершена!");
return 0;
}
И такой клиента
//client for Linux
#include <stdlib.h>
//#include <stdio.h>
#include <iostream>
#include <clocale>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
setlocale(LC_ALL, "Russian");
char buff[32] = "It's my message! YEY!";
int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sa; //структура для bind
sa.sin_family = AF_INET; //дублируем домен
sa.sin_port = htons(12345); //указываем порт,
//функция htons приводит к сетевому порядку байт
sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); //тут мы указываем локальный IP-адрес
std::cout << "Коннектимся\n";
connect(sock, (struct sockaddr *)&sa, sizeof(sa)); //соединяемся
std::cout << "Отправляем сообщение: " << buff << "\n";
//write(sock, buff, 32);
send(sock, &buff, sizeof(buff), MSG_NOSIGNAL);
std::cout << "shutdown\n";
shutdown(sock, SHUT_RDWR);
std::cout << "close\n";
close(sock);
return 0;
}
В моём случае recv взращает -1, что говорит о том что произошла ошибка, какая и почему?.
И если я что-то неправильно написал в комментариях, исправьте пожалуйста.