Доброго всем времени суток! Я пишу небольшую клиент-сервер пару. В сокетах, тем более на *nix я чайник, поэтому буду благодарен Вам за помощь!
Ситуация: Соединение клиента с сервером происходит нормально. Сервер акцептирует соединение. Потом задача такова: клиент шлет серверу строку данных. Сервер получает ее, обрабатывает и отсылает клиенту ответ в виде тоже строки данных.
Вот в чем проблема: Сервер получает данные от клиента, а потом то ли не отдает, то ли клиент их не получает. В общем оба виснут. Пока еще сервер ничего не делает со строкой от клиента - тест пока только соединения. Т.е. должен пройти хотя бы диалог. А он не получается. Помогите, пожалуйста!
Привожу части программ: Сервер:
char* query = (char*)malloc(128*sizeof(char)); int rc; char c; int n = 0; while(1){ if ( (rc = recv(newsockfd, &c, 1,0)) == 1){ *query++ = c; n++; } else if (rc == 0) break; }; *query = 0; query -= n; printf("HIT: %s\n",query);
char* msg = "Hello, boy!"; send(newsockfd,msg,strlen(msg),0);
Клиент:
send(sockfd,"Hi, man!",strlen("Hi, man!"),0);
int rc; char c; while(1) { if ( (rc = recv(sockfd, &c, 1,0)) == 1){ putc(c,stdout); if(c == 0) break; } // Ответ сервера выводится в stdout else if (rc == 0) break; };
Сокет в обеих прогах открывается так: socket(AF_INET, SOCK_STREAM, 0);
Причем, что странно: когда я убираю второе сообщение. Т.е. либо если оставить только сообщение от клиента серверу, или от сервера клиенту - т.е. одностороннее - все работает. А двустороннее - виснет ...