Связь между отправляющим client.cpp и читающим server_in.cpp я поставил например на 3000-ый порт, а связь server.cpp - client_in.cpp на 2000-ый...
Вот тексты программ без include:
server.cpp
Код:
int main(){
struct sockaddr_in local;
char buf1[50];
int fd=fork();
if(fd==0){
execlp("/home/download/sockets/server_in","/home/download/sockets/server_in",NULL);
std::cerr << "Exec_Err\n";
}
local.sin_family=AF_INET;
local.sin_port=htons(2000);
local.sin_addr.s_addr=htonl(INADDR_ANY);
int s=socket(AF_INET, SOCK_STREAM,0);
if(s==-1) {std::cerr << "socket\n"; return 1;}
int b=bind(s,(struct sockaddr*)&local, sizeof(local));
if(b==-1) {std::cerr << "bind_send\n";return 1;}
int l=listen(s,5);
while(1){
int a=accept(s,NULL,NULL);
std::cout << "Your message: ";
std::cin >> buf1;
l=send(a,buf1,sizeof(buf1),0);
std::cout << buf1 << std::endl;
}
return 0;
}server_in.cpp
Код:
int main(){
struct sockaddr_in local;
char buf1[50];
local.sin_family=AF_INET;
local.sin_port=htons(3000);
local.sin_addr.s_addr=htonl(INADDR_ANY);
int s=socket(AF_INET, SOCK_STREAM,0);
if(s==-1) {std::cerr << "socket\n"; return 1;}
int b=bind(s,(struct sockaddr*)&local, sizeof(local));
if(b==-1) {std::cerr << "bind_read\n";return 1;}
int l=listen(s,5);
while(1){
int a=accept(s,NULL,NULL);
l=recv(a,buf1,sizeof(buf1),0);
std::cout << buf1 << std::endl;
}
return 0;
} client.cpp
Код:
int main(int argc,char *argv[]){
char buf1[50],buf2[50];
struct sockaddr_in tohost;
struct hostent *host;
int fd=fork();
if(fd==0){
execlp("/home/download/sockets/client_in","/home/download/sockets/client_in",argv[1],NULL);
cerr << "Exec_Err\n";
}
if((host=gethostbyname(argv[1])) == NULL)
{cerr << "bad_gethost" << endl; return 1;}
tohost.sin_family=AF_INET;
tohost.sin_port=htons(3000);
bcopy(host->h_addr, (struct sockaddr*)&tohost.sin_addr, host->h_length);
int s=socket(AF_INET, SOCK_STREAM, 0);
if(s==-1) {cerr << "bad_socket" << endl; return 1;}
while(1){
int c=connect(s, (struct sockaddr*)&tohost, sizeof(tohost));
if(c!=0) {cerr << "bad_connect_write" << endl;return 1;}
cout << "Your message: ";
cin >> buf2;
c=send(s,buf2,sizeof(buf2),0);
cout << buf2 << endl;
}
return 0;
}client_in.cpp
Код:
int main(int argc,char *argv[]){
struct sockaddr_in local;
char buf1[50];
struct hostent *host;
if((host=gethostbyname(argv[1])) == NULL)
{std::cerr << "bad_gethost" << std::endl; return 1;}
local.sin_family=AF_INET;
local.sin_port=htons(2000);
bcopy(host->h_addr, (struct sockaddr*)&local.sin_addr, host->h_length);
int s=socket(AF_INET, SOCK_STREAM,0);
if(s==-1) {std::cerr << "socket\n"; return 1;}
while(1){
int c=connect(s, (struct sockaddr*)&local, sizeof(local));
if(c!=0) {std::cerr << "bad_connect_read" << std::endl;return 1;}
c=recv(s,buf1,sizeof(buf1),0);
std::cout << buf1 << std::endl;
}
return 0;
} Так вот... В результате получаю ошибки у сервера bind_read. Ну и соответственно все мои отправки с клиента бессмысленны....
Может ли вообще работать такая схема? Если да, то где промах? Какие еще схемы такой связи можно организовать (более выгодно)?
P.S. если кто не понял я хотел наладить что-то вроде чата...