Здравствуйте! Проблема такая: пишу чат на С под Linux. Чат состоит из двух компонентов: клиент и сервер. Клиент пишет сообщение и передает серверу, а сервер должен это сообщение напечатать, но, по неизвестной, к сожалению, мне причине, сервер сообщение не получает. Подскажите пожалуйста в чем моя ошибка! Заранее большое спасибо!
сервер:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
int main()
{
int st = socket(AF_INET,SOCK_STREAM,0);
if (st<0)
{
perror("socket");
exit(-1);
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(1501);
addr.sin_addr.s_addr = INADDR_ANY;
int bnd = bind(st,(struct sockaddr*)&addr,sizeof(addr));
if(bnd<0)
{
perror("bind");
exit(-1);
}
int lst;
lst = listen(st,10);
struct sockaddr_in addr1;
int st1, stlen1;
st1 = accept(st,(struct sockaddr*)&addr1,&stlen1);
if(st1==NULL)
{
perror("st1");
exit(-1);
}
int snd;
int from_len=0;
char str[80]="";
printf("Message0: %s \n", str);
while(1)
{
if((from_len = recv (st, str, 80, 0))<0)
{
perror("recv");
//exit(-1);
}
//printf("From_len: %d\n", from_len);
write (1, str, 80);
//printf("Message: %s \n", str);
//send (st1, str, 80, 0);
sleep(4);
}
shutdown(st,2);
//shutdown(st1,2);
close(st);
//close(st1);
exit(0);
}
клиент:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netdb.h>
extern int h_errno;
int main()
{
struct hostent *gethost;
gethost = gethostbyname("127.0.0.1");
if(gethost==NULL)
{
perror("gethostbyname");
exit(-1);
}
int st = socket(AF_INET,SOCK_STREAM,0);
if (st<0)
{
perror("socket");
exit(-1);
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(1501);
addr.sin_addr.s_addr = ((struct in_addr*)(gethost->h_addr))->s_addr;
int cnct = connect(st,(struct sockaddr*)&addr,sizeof(addr));
if(cnct<0)
{
perror("connect");
exit(-1);
}
int snd;
//int stlen1=sizeof(addr1);
int stlen1;
//int st1 = accept(st,(struct sockaddr*)&addr1,&stlen1);
char str[80];
while(1)
{
gets(str);
//int from_len = sizeof(addr1);
//s_new = accept (s, &from_sin, &from_len);
//st1 = accept(st,(struct sockaddr*)&addr1,&stlen1);
//(st, str,80);
//int from_len = read (st, str, 90);
//write (1, str, 80);
snd=send(st, str, 80, 0);
sleep(4);
}
shutdown(st,2);
//shutdown(st1,2);
close(st);
//close(st1);
//}
exit(0);
}
P.S.
Сильно пожалуйста не ругайте, сетевые приложения создаю первый раз