Хлопцы!!! Трабля с сокетами! Помогите разобраться! Вот две дрищ-программки: сервер и клиент...
Сервер
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
int main(){
int sock_exchange, sock_listen;
struct sockaddr_in addr;
char buf[1024];
int bytes_read;
sock_listen = socket(PF_INET, SOCK_STREAM, 0);
if(sock_listen < 0){
return 1;
}
addr.sin_family = PF_INET;
addr.sin_port = htons(3425);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sock_listen, (struct sockaddr *)&addr, sizeof(addr)) < 0){
return 1;
}
listen(sock_listen, 1);
while(buf[0] != 'q'){
sock_exchange = accept(sock_listen, 0, 0);
if(sock_exchange < 0){
return 1;
}
while( (bytes_read = recv(sock_exchange, buf, 1024, 0)) <= 0 ){ // РС…Рѕ
send(sock_exchange, buf, bytes_read, 0);
}
close(sock_exchange);
}
close(sock_listen);
printf("Quit\n");
return 0;
}
КлиентКод:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
char message[] = "q";
char buf[sizeof(message)];
int main(){
int sock;
struct sockaddr_in addr;
sock = socket(PF_INET, SOCK_STREAM, 0);
if(sock < 0)
{
return 1;
}
addr.sin_family = PF_INET;
addr.sin_port = htons(3425);
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
{
return 1;
}
send(sock, message, sizeof(message), 0);
recv(sock, buf, sizeof(message), 0);
printf(buf);
close(sock);
return 0;
}
Запускаю сервер - он ждет...
Запускаю клиент - он отправляет "q". Сервак завершает работу как надо. Но клиенту ответ не приходит! Шо за нах?