Ниже приведены исходные тексты программ для создания простого клиентского и серверного приложений, работающих в паре друг с другом.
Клиент
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h> //для функции exit()
#include <string.h> //для функции memset()
int main(void)
{
struct sockaddr_in peer;
int s;
int rc;
char buf[1];
memset(&peer, 0, sizeof(peer));
peer.sin_family=AF_INET;
peer.sin_port=htons(7500);
peer.sin_addr.s_addr=inet_addr("127.0.0.1");
s=socket(AF_INET, SOCK_STREAM,0);
if(s<0)
{
perror("Ошибка 1");
exit(1);
}
rc=connect(s, (struct sockaddr *)&peer, sizeof(peer));
if(rc<0)
{
perror("Ошибка 2");
exit(1);
}
rc=send(s, "1", 1, 0);
if(rc<=0)
{
perror("Ошибка 3");
exit(1);
}
rc=recv(s, buf, 1, 0);
if(rc<=0)
perror("Ошибка 4");
else
printf("%c\n", buf[0]);
exit(0);
}
Сервер
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h> //для функции exit()
int main(void)
{
struct sockaddr_in local;
int s;
int sl;
int rc;
char buf[1];
local.sin_family=AF_INET;
local.sin_port=htons(7500);
local.sin_addr.s_addr=htonl(INADDR_ANY);
s=socket(AF_INET, SOCK_STREAM,0);
if(s<0)
{
perror("Ошибка 1");
exit(1);
}
rc=bind(s, (struct sockaddr *)&local, sizeof(local));
if(rc<0)
{
perror("Ошибка 2");
exit(1);
}
rc=listen(s, 105);
if(rc<0)
{
perror("Ошибка 3");
exit(1);
}
sl=accept(s, NULL, NULL);
if(sl<0)
{
perror("Ошибка 4");
exit(1);
}
rc=recv(sl, buf, 1, 0);
if(rc<=0)
{
perror("Ошибка 5");
exit(1);
}
printf("%c\n", buf[0]);
rc=send(sl, "2", 1, 0);
if(rc<=0)
perror("Ошибка 6");
exit(0);
}
Для проверки работоспособности приложений необходимо сначала в одном терминале запустить сервер, после чего во втором терминальном окне запустить клиентскую программу.