Показать сообщение отдельно
Старый 29.12.2009, 18:10
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
От всей души вкладываю примитивный исходник, рабочий, проверял в связке с флэшем:
Код:
#include <iostream>
using namespace std;
#include <winsock2.h>

#pragma comment (lib, "ws2_32.lib")
#pragma comment (lib, "mswsock.lib")

void main(void) {
	char PCName [30], ClientName[30], Message[200];
	WSAData WSADat; // Свойства WinSock (результат функции WSAStartup)
	sockaddr_in sin; // Свойства(адрес) создаваемого сокета
	SOCKET Sock, Client; // Серверный и клиентский сокеты

	WSAStartup(0x0202,&WSADat); // Инициализация WinSock
								// 0x0202 - версия WinSock. Может быть 1.0, 1.1, 2.0, 2.2
								// WSADat - структура, куда будут занесены рез. инициализации
	gethostname(PCName, 30); // Получение имени текущего ПК

	sin.sin_family = AF_INET; // Тип адреса
	sin.sin_addr.s_addr = 0;  // IP-адрес сервера (пори создании сервера можно 0)
	sin.sin_port = htons(2803); // Номер порта сервера
	Sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Создание сокета
	bind(Sock, (sockaddr*)&sin, sizeof(sin)); // Связывание созданного сокета с адресом sin

	// ***** Ожиданеи клиента
	cout << "Wait of client..." << endl;
	
	listen(Sock, SOMAXCONN); // Прослушивание сокета сервером (для подключения клиента)
	Client = accept(Sock, (sockaddr*)&sin, 0); // Ожидание клиента
	recv(Client, ClientName, 30, 0); // Получение имени компьютера клиента
	send(Client, PCName, strlen(PCName) + 1, 0); // Отправка имени этого компьютера (сервера)

	cout << "Client ( " << ClientName << " ) has connected!" << endl;

	// ***** Меню
	int Menu;
	do {
		cout << "1. Send message;" << endl;
		cout << "2. Get Message;" << endl;
		cout << "3. Quit;" << endl;

		cout << "Make your selection: ";	cin >> Menu;

		switch (Menu) {
		case 1:
			// Отправка сообщения клиенту
			cout << "Enter message: "; cin.get();
			cin.getline(Message, 200);
			if (send(Client, Message, strlen(Message) + 1, 0) != SOCKET_ERROR) cout << "Sent!\n";
			else cout << "Error of sending!\n";
		break;
		case 2:
			// Приём сообщения от клиента
			if (recv(Client, Message, 200, 0) != SOCKET_ERROR) { 
				cout << Message << endl;
				cin.get();
			}
			else cout << "Error of getting!\n";
		break;
		};

		cout << endl;
	} while (Menu != 3);

	// Закрытие сокетов и окончание работы с WinSock
	closesocket(Sock);
	closesocket(Client);
	WSACleanup();
}
Компилил под MS VS C++ 2005 Express. Полегчало? .
Да, хорошо бы подковаться малость, а то опять тема получится никакая.


Последний раз редактировалось alexcon314; 29.12.2009 в 18:17.