Народ помогите...обычная програмка клиента и сервера.Клиент посылает серверу сообщение "Здравствуй мир".При запуске программы клиента выдает :"Ошибка передачи сообщения".Еще такой вопрос:"Сначала нужно запускать программу сервера а потом программу клиента?или наоборот".
Сервер
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#define MAXBUF 256
char buf [MAXBUF];
main()
{
struct sockaddr_un serv_addr, clnt_addr;
int sockfd;
int saddrlen,caddrlen,max_caddrlen,n;
if((sockfd = socket(AF_UNIX, SOCK_DGRAM,0)) < 0)
{
printf("Невозможно создать сокет‚\n");
exit(1);
}
unlink("./new/7/serv");
bzero(&serv_addr,sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path,"./new/7/serv");
saddrlen = sizeof(serv_addr.sun_family) + strlen(serv_addr.sun_path);
if(bind(sockfd,(struct sockaddr *)&serv_addr, saddrlen) < 0)
{
printf("Ошибка связывания сокета\n");
exit(1);
}
max_caddrlen = sizeof(clnt_addr);
for( ; ; )
{
caddrlen = max_caddrlen;
n = recvfrom(sockfd, buf, MAXBUF, 0, (struct sockaddr*)&clnt_addr, &caddrlen);
if(n < 0)
{
printf("Ошибка приема\n");
exit(1);
}
if(sendto(sockfd, buf, n, 0, (struct sockaddr*)&clnt_addr,caddrlen) != n)
{
printf("Ошибка передачи\n");
exit(1);
}
}
}
Клиент
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
char *msg = "Зравствуй мир! \n";
#define MAXBUF 256
char buf[MAXBUF];
main()
{
struct sockaddr_un serv_addr , clnt_addr;
int sockfd;
int saddrlen, caddrlen, msglen,n;
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sun_family = AF_UNIX;
strcpy(serv_addr.sun_path, "./new/7/serv");
saddrlen = sizeof(serv_addr.sun_family) + strlen(serv_addr.sun_path);
if((sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
{
printf("Невозможно создать сокет‚ \n");
exit(1);
}
bzero(&clnt_addr, sizeof(clnt_addr));
clnt_addr.sun_family = AF_UNIX;
strcpy(clnt_addr.sun_path, "/new/7/client");
mktemp(clnt_addr.sun_path);
caddrlen = sizeof(clnt_addr.sun_family) + strlen(clnt_addr.sun_path);
if(bind(sockfd,(struct sockaddr*)&clnt_addr,caddrlen) < 0)
{
printf("Ошибка связывания сокета\n");
exit(1);
}
if(sendto(sockfd, msg, msglen, 0,(struct sockaddr*)&serv_addr,saddrlen) != msglen)
{
printf("Ошибка передачи сообщения\n");
exit(1);
}
if((n = recvfrom(sockfd, buf, MAXBUF,0,NULL,0)) < 0)
{
printf("Ошибка получения сообщения\n");
exit(1);
}
printf("Эхо: %s\n", buf);
close(sockfd);
unlink(clnt_addr.sun_path);
exit(0);
}
И еще меня интересует какой путь нужно устанавливать в этих строчках?
unlink("./new/7/serv");
strcpy(serv_addr.sun_path,"./new/7/serv");
strcpy(serv_addr.sun_path, "./new/7/serv")
strcpy(clnt_addr.sun_path, "/new/7/client");
strcpy(clnt_addr.sun_path, "/new/7/client");
Возможно из-за этого и выдается ошибка.