Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2015, 13:45   #1
Сержикк
 
Регистрация: 08.06.2014
Сообщений: 6
По умолчанию tcp/ip клиент

Задание: написать программу
1. простой ТСР клиент-сервер реализованный с помощью классов(возможно применение потоков - это опциональное усложнение задачи)
2. добавить функции
а) add - добавление записи
b) remove - удаление записи
c) display - вывод всех записей на экран (выводятся на экран клиентом)

Вот client.cpp
Код:
 #define WIN32_LEAN_AND_MEAN
#include<iostream>
#include<windows.h>
#include<winsock.h>
#pragma comment (lib, "ws2_32.lib")
using namespace std;

int main()
{
	cout << "Client:" << endl;
	char ip[15];
	u_short port;
	char message[MAX_PATH];

	cout << "Input IP:" << endl;
	cin >> ip;
	cout << endl;
	cout << "Port: ";
	cin >> port;
	cout << endl;

	WSAData wsa;
	WORD Version = MAKEWORD(2, 1);

	WSAStartup(Version, &wsa);

	if (WSAStartup(Version, &wsa) != 0)
	{
		cout << "Error with library" << endl;
	}
	else
	{
		cout << "WSA library works" << endl;
	}

	SOCKET Connect = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	if (Connect == SOCKET_ERROR)
	{
		cout << "Can't create socket" << endl;
	}
	else
	{
		cout << "Socked crated!!!" << endl;
	}
	SOCKADDR_IN Client;

	Client.sin_family = AF_INET;
	Client.sin_port = htons(port);
	Client.sin_addr.s_addr = inet_addr(ip);
	while (1)
	{
		if (connect(Connect, (SOCKADDR*)&Client, sizeof(Client)))
		{
			cout << "Connect to server completed !!!" << endl;
			send(Connect, "Это должно оказаться в файле!!!", MAX_PATH, 0);
			recv(Connect, message, sizeof(message), 0);
			break;
		}

	}

	cout << message << endl;
	ZeroMemory(message, sizeof(message));
	closesocket(Connect);
	WSACleanup;
	getchar();
	getchar();
	system("pause");
	return 0;
}
Вот server.cpp
Код:
#include "server.h"

// SOCKET socket (family of protocols,TYPE of protocol,transport of protocol);
// Inf for client: Create client-> int connect(SOCKET s,pointer on struct sockaddr, sizeof(sockaddr) ); 
//create client like this 
// give us func's: send and recv
//link for location socked -> BIND!!!
//SOCKET accept - извлечение запросов на соединение из очереди
//она работает до тех пор пока не установиться очередное соединение
//closesocket(SOCKET s) тут все понятно
//WSACleanup чистит используемые ресурсы из библиотеки winsock

Server::Server()
{
	stream.open("F:\\Server.txt", ios::app);
}
void Server::ADD(char mess[])
{
	while (!stream.eof())
	{
		stream << mess;

	}
}
int main()
{
	//перед началом использование библиотеки winsock ее необходимо подготовить к работе вызова функции
	//int WSAStartup
	cout << "Server: " << endl;
	Server value;

	char message[MAX_PATH];
	WSAData wsa;
	WORD Version = MAKEWORD(2, 1); //формируем номер версии библиотеки
	WSAStartup(Version, &wsa);

	if (WSAStartup(Version, &wsa) != 0)
	{
		cout << "Error with library" << endl;
	}
	else
	{
		cout << "WSA library works" << endl;
	}

	SOCKET Listen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//режим ожидания подключений
	SOCKET Connect = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//установка соединения с удаленным узлом

	if (Listen == SOCKET_ERROR || Connect == SOCKET_ERROR)
	{
		cout << "Can't create socket!!! " << endl;
	}
	else
	{
		cout << "Socket created!!!" << endl;
	}

	SOCKADDR_IN Server;//структура для winsock2.h

	Server.sin_family = AF_INET; //семейство протоколов
	Server.sin_port = htons(1200);// порт, htons означает что сетевой порядок байт
	//преобразовывает короткое целое из формата локального хоста
	Server.sin_addr.s_addr = INADDR_ANY;//IP-адрес

	if (bind(Listen, (SOCKADDR*)&Server, sizeof(Server)) == SOCKET_ERROR)//устанавливаем соединение с указанным узлом посредством бинда
	{
		cout << "Can't bind socket!!!";
	}
	else
	{
		cout << "Socked bind created!!!" <<  endl;
	}

	listen(Listen, SOMAXCONN);

	while (true)
	{
		if (Connect = accept(Listen, NULL, NULL))//извлечение запросов на соединение из очереди
		{

			cout << "Client connected!!!" << endl;
			recv(Connect, message, sizeof(message), 0);
			value.ADD(message);
			break;
			send(Connect, "Message to client!Hello Client!", sizeof(message), 0);

		}
		Sleep(100);
	}
	cout << message << endl;
	ZeroMemory(message, sizeof(message));
	closesocket(Listen);
	closesocket(Connect);
	WSACleanup;
	getchar();
	getchar();
	system("pause");
	return 0;
}

Вопрос: какой должен быть хедер к серверу?

Последний раз редактировалось Сержикк; 05.07.2015 в 14:28.
Сержикк вне форума Ответить с цитированием
Старый 05.07.2015, 13:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Эта тема о чем? У вас какие-то проблемы?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(terminal_select) TCP клиент (на языке СИ) student_5 C/C++ Сетевое программирование 2 14.06.2015 19:33
tcp. клиент сервер. проблема с recv. xquant1x C/C++ Сетевое программирование 1 14.09.2014 23:56
TCP/IP клиент -сервер zhenya.ya C/C++ Сетевое программирование 10 05.03.2011 22:01
как создать TCP клиент, TCP сервер ? DreamMaster911 C/C++ Сетевое программирование 1 26.10.2010 15:05
простой сервер(клиент) TCP nntpaha Общие вопросы C/C++ 4 25.12.2007 19:02