Передача сообщений сервера / клиента в C - PullRequest
0 голосов
/ 24 марта 2012

Я разработал клиент, который подключается к серверу. Клиент что-то пишет на сервер, а сервер читает и отвечает клиенту. Затем клиент читает то, что сказал сервер, и оба завершаются. Я хочу расширить это, позволяя клиенту и серверу продолжать говорить, скажем, еще 3 раза, а затем завершить работу. Я создал цикл for, где внутри этого цикла я обрабатывал код для чтения и записи как на сервере, так и на клиенте, но он завершается бесконечным циклом и записывает текст, введенный в первый раз, а не повторно запрашивает пользователя введите новые данные.

Код сервера, на котором выполняется чтение / запись, выглядит следующим образом:

int temp = 0;
char cha [10] = "helloworld";
while(temp = 3){

int rc;
char ch[100];


rc = read(newsockfd, &ch, 100);
    printf("Client sent: %s\n", ch ) ;      

    write(newsockfd, cha + temp, 100);

temp ++;
}


close(sockfd);
close(newsockfd);

Это код клиента, для которого выполняется чтение / запись:

int temp = 0;
char cha[10] = "abcdefhijk";

while(temp = 3)       
{
int rc;
char ch2 [100];

rc = write(sockfd, cha + temp, 100);

    read(sockfd, &ch2, 100);
    printf("Server said: %s\n", ch2);

temp ++;
}


sleep(2);
close(sockfd);

Кроме того, я закрываю файловые дескрипторы после завершения цикла.

Любая помощь с благодарностью

1 Ответ

2 голосов
/ 24 марта 2012

Не могли бы вы также предоставить код цикла? И вы используете блокирующие или неблокирующие вызовы read () и write ()? (то есть, они возвращаются немедленно независимо от того, доступны ли данные (неблокирующие) или блокируются, пока что-то не доступно (блокирует))?

Обновление: Если код, который вы разместили, является фактическим кодом, то ваш цикл while ошибается. Вы проверяете на

temp = 3

Что всегда верно, поскольку вы просто назначаете '3' для temp. Вы, наверное, имеете в виду

temp < 3

...