Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 05.07.2015, 14:45   #1
Сержикк
 
Регистрация: 08.06.2014
Сообщений: 6
Репутация: 10
По умолчанию 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 в 15:28.
Сержикк вне форума   Ответить с цитированием
Старый 05.07.2015, 14:49   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,078
Репутация: 1862

icq: 216409213
По умолчанию

Эта тема о чем? У вас какие-то проблемы?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


12:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru