LINUX.ORG.RU

проблема с сокетами [C]

 


0

0

Hello люди. Есть пример из книги. Но не понимаю почему не работает. Может кто-то подскажет?!

server
int main (void)
{
int listenfd, connfd;
time_t ticks;
char buff[LINE];
struct sockaddr_in servaddr;

errno=0;

if((listenfd=socket(AF_INET, SOCK_STREAM, 0))<0)
{
fprintf(stderr,"%s\n",strerror(errno));
exit(EXIT_FAILURE);
}

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);

if((bind(listenfd,(struct sockaddr *)&servaddr, sizeof(servaddr)))!=0)
{
fprintf(stderr,"%s\n",strerror(errno));
exit(EXIT_FAILURE);
}

if((listen(listenfd,16))!=0)
{
fprintf(stderr,"%s\n",strerror(errno));
exit(EXIT_FAILURE);
}

for(;;)
{
connfd=accept(listenfd,(struct sockaddr *)NULL, NULL);
ticks=time(NULL);
snprintf(buff,sizeof(buff),"%24s\er\en",ctime(&ticks));
write(connfd,buff,strlen(buff));

close(connfd);
}

return 0;
}


client
int main (int argc, char *argv[])
{
int sockfd, n;
char recvline[LINE-1];
struct sockaddr_in servaddr;

if(argc!=2)
{
printf("Usage:%s ip address time server\n");
exit(EXIT_FAILURE);
}

if((sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)
{
perror("Socket init: ");
exit(EXIT_FAILURE);
}

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);

if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<0)
{
perror("inet_pton: ");
exit(EXIT_FAILURE);
}

while((n=read(sockfd,recvline,LINE))>0) //чтение не происходит (
{
recvline[n]=0;
if(fputs(recvline,stdout)==EOF) perror("fputs: ");
}
if(n<0) perror("Error read of socket: ");

return 0;
}

Заранее спасибо!


И обрати внимание на форматирование кода в книге, приучи себя писать также(я не про отступы в блоках{}).

golodranez ★★★★
()
Ответ на: комментарий от golodranez

>(я не только про отступы в блоках{}).
fixed

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.