Отправка буфера в c сокет программирования с записью

Этот ответ не применим к 2005 году, как указано здесь, но в случае, если кто-то сталкивается с этим во время поиска и использует 2008 год, у этого другого вопроса есть рабочий ответ: SSIS 2008 и Undouble

-1
задан Francesco Boi 18 March 2019 в 16:52
поделиться

1 ответ

В вашем коде много ошибок:).

Прежде всего scanf принимает в качестве 1-го аргумента указатель, поэтому, когда вы хотите использовать его для строки, сделайте:

char ip[10];
...
scanf("%s", ip);//THIS IS CORRECT

not scanf("%s", &ip);.

На сервере компилятор жаловался на тип clilen. accept ожидает sockelen_t (или эквивалентно unsigned int), в то время как вы объявили эту переменную простой int.


Основная проблема

Это следующее. В клиенте вы сделали strcpy(buffer, name);, который копирует name, начиная с начала буфера, но начало буфера фактически содержало ваши данные. Вы должны сделать что-то вроде следующего, используя strcat, как вы делали в следующей строке:

    bzero(buffer, 255);
    fgets(buffer, 255, stdin);
    strcat(buffer, name);
    strcat(buffer, ": ");

Дальнейшие общие рекомендации

Также обратите внимание на другое: избегайте смешивания функций системного вызова read write getchar с библиотечными функциями, такими как fread, fwrite, fgets. У меня была эта проблема с тем, что вызвано тем фактом, что fgets может читать больше байтов, чем ожидалось. В вашем случае все должно быть в порядке, потому что вы используете их для разных целей.

0
ответ дан Francesco Boi 18 March 2019 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: