Примеры взяты из книги А Робачевского, скомпилированы в исполняемые файлы а вот вместе запустить в одной оси на взаимодействие незнаю как, может нужно как то вместе запускать и параметры еще каки-то задавать, ну в обще подскажите как правильно, если несложно.

Вот исходники, если нужно.
Сервер:
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <fcntl.h>
#include <netdb.h>
#define PORTNUM 1500
main(argc, argv)
int argc;
char *argv[];
{
int s, ns;
int pid;
int nport;
struct sockaddr_in serv_addr, clnt_addr;
struct hostent *hp;
char buf[80], hname[80];
nport = PORTNUM;
nport = htons((u_short)nport );
if((s=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("РћС?РёР±РєР° вызова socket()"); exit(1);
}
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = nport;
if(bind(s, (struct sockaddr *)&serv_addr,
sizeof(serv_addr))== -1)
{
perror("РћС?РёР±РєР° вызова bind()"); exit(1);
}
fprintf(stderr, "Сервер готов: %s\n",
inet_ntoa(serv_addr.sin_addr));
if(listen(s, 5) == -1)
{
perror("РћС?РёР±РєР° вызова listen()"); exit(1);
}
while(1)
{
int addrlen;
bzero(&clnt_addr, sizeof(clnt_addr));
addrlen = sizeof(clnt_addr);
if((ns = accept(s, (struct sockaddr *)&clnt_addr,
&addrlen))== -1)
{
perror("РћС?РёР±РєР° вызова accept()"); exit(1);
}
fprintf(stderr, "Клиент = %s\n",
inet_ntoa(clnt_addr.sin_addr));
if((pid = fork())==-1)
{
perror("РћС?РёР±РєР° вызова fork()"); exit(1);
}
if(pid==0)
{
int nbytes;
int fout;
close(s);
while((nbytes = recv(ns, buf, sizeof(buf), 0)) != 0)
{
send(ns, buf, sizeof(buf), 0);
}
close(ns);
exit(0);
}
}
}
Клиент:
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <fcntl.h>
#include <netdb.h>
#define PORTNUM 1500
main(argc, argv)
char *argv[];
int argc;
{
int s;
int pid;
int i, j;
struct sockaddr_in serv_addr;
struct hostent *hp;
char buf[80]="Hello, World!";
if((hp=gethostbyname(argv[1])) == 0)
{
perror("РћС?РёР±РєР° вызова gethostbyname()"); exit(3);
}
bzero(&serv_addr, sizeof(serv_addr));
bcopy(hp->h_addr, &serv_addr.sin_addr, hp->h_length);
serv_addr.sin_family = hp->h_addrtype;
serv_addr.sin_port = htons(PORTNUM);
if((s=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("РћС?РёР±РєР° вызова socket()"); exit(1);
}
fprintf(stderr, "Адрес клиента: %s\n",
inet_ntoa(serv_addr.sin_addr));
if(connect(s, (struct sockaddr *)&serv_addr,
sizeof(serv_addr)) == -1)
{
perror("РћС?РёР±РєР° вызова connect()"); exit(1);
}
send(s, buf, sizeof(buf), 0);
if(recv(s, buf, sizeof(buf), 0) < 0)
{
perror("РћС?РёР±РєР° вызова recv()"); exit(1);
}
printf("Получено от сервера: %s\n", buf);
close(s);
printf("Клиент заверС?РёР» работу \n\n");
}
Где иероглифы - это просто сообщения на русском языке.