Нам нужно создать приложение p2p для текстового сообщения с C. Мы уже установили соединение p2p с использованием интерфейса TCP, но у нас возникли проблемы с реализацией протокола для отправки и чтения сообщений.
Сообщения должны быть в следующем формате:
Строка - это сообщение, которое мы хотим отправить и прочитать. Сообщение будет начинаться с 3 символов, чтобы указать размер строки (например, 005).
Затем будет строка, которую мы хотим написать или прочитать (например, привет).
Итаксообщение должно быть char t [] и для этого примера это будет 005 hello. Никакие «\ n» или «\ 0» не должны быть отправлены или прочитаны, только размер и строка.
Мы читаем и пишем сообщения, используя клавиатуру, используя системы вызовов read () и write (), поэтому мымы знаем, что у нас будут '\ n' и '\ 0', которые мы хотим удалить.
Мы попытались реализовать 2 функции, которые не работают как намерение. MI_SendLine (int Socket, const char * Line) и MI_ReceiveLine (int Socket, const char * Line).
MI_SendLine должен преобразовать * строку в описанный протокол, поэтому строка «привет» будет преобразована в «005hello "," hello \ 0 \ n "будет преобразовано в" 005hello "," thx для вашего времени \ n "будет" 017thx для вашего времени ".
Для функции receiveLine у нас то же самоепроблем, поэтому код будет опущен.
int MI_SendLine(int Socket, const char *Line)
{
//PROTOCOL TRANSFORMATION
//3 chars reserved for size of msg
char message[3 + strlen(Line)];
int size = strlen(Line);
int j;
for(j = 2; j >= 0; j--){
message[j] = (size % 10) + '0';
if(size > 0)
size /= 10;
}
int i;
for(i = 3; i < strlen(Line) + 3; i++){
message[i] = Linia[i - 3];
}
//END PROTOCOL TRANSFORMATION
return TCP_Send(Socket, message, sizeof(message));
}
Функция TCP, она была протестирована и работает правильно
int TCP_Sent(int Sck, const char *SeqBytes, int LongSeqBytes)
{
int bytes_written;
if((bytes_written=write(Sck,SeqBytes,LongSeqBytes))==-1){
perror("error en write");
close(Sck);
exit(-1);
}
return bytes_written;
}
Мы ожидаем, что вывод "hello \ n" будет«005hello», но фактическим выводом является таблица символов, заполненных неизвестными символами.
Пример: 1-е сообщение: введите «aaa», получено сообщение «aaa?»но это не так? само по себе, это странный символ, содержащий его.
2n сообщение: введите "b" полученное сообщение "b?.
3-е сообщение: введите" ccccc "полученное сообщение" ccccc ", но без