Отправка по сети не строки, а файла

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Здравствуйте!

Серверная часть программы:

Код: Выделить всё

…………………………
//Получение данных
ret = recv(sock, szRecvBuff, 1024, 0);
……………………………………………
//Подготовка строки для отправки клиенту
szBuff = " Command get OK ";
strcpy(szBuff, " Command get OK ");

int nSendSize = sizeof(szBuff);
		int iCurrPos = 0;

		while(nSendSize > 0)
		{
			int ret = send(sock, &szBuff[iCurrPos], nSendSize, 0);
			if(ret == 0)
				break;
			else
			if(ret == SOCKET_ERROR)
			{
				//Произошла ошибка
				MessageBox(0, "Send filed", "Error", 0);
				break;
			}
			nSendSize -= ret;
			iCurrPos += ret;
		}
Клиентская часть программы (другой компьютер):

Код: Выделить всё

………………….
strcpy(szMessage, "get");
strcpy(szServerName, "168.192.123.15");

sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
………………………………………
ret = send(sClient, szMessage, strlen(szMessage), 0);
………………………………………
//Получение данных, т.е. строки
	char szBuff[4096];
	int nSendSize = 1000000; //Размер данных
	int iCurrPos = 0;

	while(nSendSize > 0)
	{
		ret = recv(sClient, &szBuff[iCurrPos], nSendSize, 0);
		if(ret == 0)
			break;
		else
		if(ret == SOCKET_ERROR)
		{
			//Произошла ошибка
			MessageBox(0, "Send filed1", "Error", 0);
			break;
		}
		nSendSize -= ret;
		iCurrPos += ret;
	}
MessageBox(0, szBuff, "Recived data", 0); //Здесь выводится окно со строкой               « Command get OK »

	closesocket(sClient);
Код для отправки строки (по локальной сети).
Пожалуйста, подскажите (хотя бы функцию, CopyFile не работает), как переделать код, что бы отправить файл. У меня Visual Studio.NET 2003 без NSDN.

Спасибо.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ты пыталась вызвать CopyFile через сокет? O_o

Нужно открыть файл на сервере, прочитать его в тот самый буфер, который у тебя передаётся, передать, затем на клиенте принять буфер, создать файл и записать в него содержимое буфера.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Да, CopyFile, это большая глупость...только что занялась программированием в сети.
За совет огромное спасибо!
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

А чего не хочешь воспользоваться уже готовыми протоколами передачи данных по сети, типа FTP для обмена файлами или HTTP для передачи текста? Для этого есть все необходимые функции в Windows API. А сокетами следует пользоваться скорее для каких-то нестандартных решений, для разработки собственных сетевых протоколов и т.п.
Лена89
Сообщения: 52
Зарегистрирован: 20 июн 2007, 10:36

Да, это верно. Но мне необходимо работать с протоколом TCP (в подробности не вдаюсь, да на форуме это и не важно я думаю).
Ответить