Простое клиент-серверное приложение

Ниже приведены исходные тексты программ для создания простого клиентского и серверного приложений, работающих в паре друг с другом.

Клиент

#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);
}

Для проверки работоспособности приложений необходимо сначала в одном терминале запустить сервер, после чего во втором терминальном окне запустить клиентскую программу.

Hosted by uCoz