2012-03-24 4 views
0

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

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

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); 

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

Любая помощь очень ценится

+4

'while (temp = 3)' выглядит как опечатка. предложение: используйте цикл for(). – wildplasser

ответ

2

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

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

temp = 3 

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

temp < 3 

?

+0

Я не уверен, что чтение и запись блокируются или не блокируются, но из того, что я могу сказать, это то, что в первом цикле сервер ожидает, что клиент отправит ему что-то, что, следовательно, я предполагаю его блокировку. но опять же, я не уверен ... я собираюсь обновить код выше, включая цикл. – cgval

+0

Добро пожаловать в SO! Пожалуйста, поместите все свои вопросы в вопросник в разделе комментариев, а не в ответах. –

+1

Pavan, я бы с удовольствием это сделал, но, к сожалению, у меня пока нет достаточной репутации, чтобы иметь возможность ... Комментируя вопросы других народов, по-видимому, требуется, по крайней мере, репутация 50 ... – sonicwave

Смежные вопросы