memset(buffto, 0, sizeof(buffto));//очищаем буфер
n = read ( 0, buffto, sizeof(buffto) );//как я понимаю теперь в буфере теперь содержится само сообщение потом '\n' потом '\'
//cout<<n<<endl; // количество считаных символов получаем на 2 больше чем введенных те как я думаю с бслешн и бслеш0
a.Send( buffto);//отправляем функцией сенд
сама функция Send:
int Send ( char* message)
{
int len;
len = write( sd, message, strlen(message)+1);
cout<<"VOT"<<len<<endl;
printf("message sent:");
printf( "%s\n", message );
return len;
}
теперь програма приниматель:
тут только выполняется функция
int Recv ( char message[256],int d )
{
int len;
len = read ( d, message, strlen(message)+1);
cout<<"VOT"<<len<<endl; //вроде должна печатать то же число что и выводится в отправителе
return len;
}
однако получается вообще нечто странное- печатается 2 числа которые в сумме представляют какраз количество отправленных символов!!
тоесть отправив слово 12345 отправитель выведет число 7 а получатель выведет вот что дословно:
VOT2
VOT2
VOT2
VOT1
много эксперементировал с sizeof strlen но успеха не добился
очень прошу обьясните дураку что не так я просто не понимаю где же я наляпал
int Recv ( char message[256],int d )
{
int len;
len = read ( d, message, strlen(message)+1);
а что у нас в переменной message? Очевидно ничего - мусор.
А как strlen читает длину строки? Ищет конец строки -
А где в message ? - Как повезет, но наверно где то в начале.
сделайте вывод возврата strlen(message)+1 в Recv до чтения и посмотрите что будет.
Может стоит использовать pipe или очередь сообщений
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
Наверное, сокеты TCP, раз у тебя такие проблемы.
Чтобы получить удовольствие от этого протокола, тебе нужно придумать свой программный протокол передачи данных.
Что будет началом порции данных, что длиной данных, что данными.
Твой код лучше выглядит вот так:
int Send(char *message, int mLen)
{
int len;
len = write(sd, message, mLen);
cout << "VOT" << len << endl << "message sent:" << endl << message << endl;
return len;
}
int Recv(char *message, int mLen, int d) // message[256] - передаешь по значению вешь массив, а это накладно
{
int len;
len = read(d, message, mLen);
cout << "VOT" << len << endl; //вроде должна печатать то же число что и выводится в отправителе
return len;
}
а можно еще читать в цикле по одному байту до тех пор, пока не встретиться конец строки
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.