|
|
|
| Привет всем. я вот столкнулся с проблемой использования сокетов.
для начала мне надо нучиться читать файл по сети. допустим, у себя же семого. Как это сделать?
А то я нете видел код, но как-то его модифицировать не удается.
Буду очень благодарен. | |
|
|
|
|
|
|
|
для: AlMag
(01.10.2008 в 08:53)
| | Ну хотя бы привели этот код.... | |
|
|
|
|
|
|
|
для: ddhvvn
(01.10.2008 в 10:24)
| |
// ws2.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "winsock2.h"
#include "windows.h"
#define request "GET /b.php HTTP/1.0\r\nHost: www.anotherd.com\r\n\r\n" // HTML запрос
#define MAX_PACKET_SIZE 4096
#define SERVER "127.0.0.1"
int main(int argc, char* argv[])
{
WSADATA ws;
SOCKET s;
sockaddr_in adr;
hostent* hn;
char buff [MAX_PACKET_SIZE];
// Init
if (WSAStartup (0x202, &ws) != 0)
{
// Error
return -1;
}
// Создаем сокет
if (INVALID_SOCKET == (s = socket (AF_INET, SOCK_STREAM, 0/*IPPROTO_TCP*/) ) )
{
// Error
return -1;
}
// Получаем адрес
DWORD a=inet_addr(SERVER);
if (inet_addr(SERVER)!=INADDR_NONE) adr.sin_addr.S_un.S_addr = inet_addr(SERVER);
else
if (hn=gethostbyname(SERVER)) ((unsigned long *)&adr.sin_addr)[0]=((unsigned long **)hn->h_addr_list)[0][0];
else
{
printf("Invalid adress %s\n", SERVER);
closesocket(s);
WSACleanup();
return -1;
}
adr.sin_family = AF_INET;
//adr.sin_addr.S_un.S_addr = *(DWORD* ) hn->h_addr_list[0];
int port = 80;
adr.sin_port = htons (port);
if (SOCKET_ERROR == connect (s, (sockaddr* )&adr, sizeof (adr) ))
{
// Error
return -1;
}
if (SOCKET_ERROR == send (s, &request, sizeof (request), 0) )
{
// Error
return -1;
}
int len = recv (s, (char *) &buff, MAX_PACKET_SIZE, 0);
if ( (len == SOCKET_ERROR) || (len == 0) )
{
// Error
return -1;
}
for (int i = 0; i<len; i++)
printf ("%c", buff [i]);
if (SOCKET_ERROR == closesocket (s) )
{
// Error
return -1;
}
getchar();
return 1;
}
|
я изменил в этом коде кое что. работает, вроде. Скажите, почему я могу изпользовать 80 порт при запущеном апаче, но не могу 135 или, скажем, 990, хотя они открыты? | |
|
|
|
|
|
|
|
для: AlMag
(01.10.2008 в 10:56)
| | и еще, почему в многих примерах используются библиотеки
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
|
и так далее.
их нету в вижуал студии. их надо специально скачивать для этого? | |
|
|
|
|
|
|
|
для: AlMag
(01.10.2008 в 20:18)
| | A typical BSD sockets program has a block of #includes near the top like this:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
For Winsock, you don't need any of these. Instead, you just need to include winsock.h. (Or, if you need Winsock 2-specific functionality, winsock2.h.)
для виндов тебе нужен winsock.h
см. - http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html | |
|
|
|
|
|
|
|
для: AndreyCh
(02.10.2008 в 20:57)
| | да, я так и сделал. оно пишет, что теперь не найден тип in_port_t (который хранится в netdb.h)
если все в винсок, то почему такая ошибка?
P. S. ws2_32.lib и wsock32.lib подключил | |
|
|
|
|
|
|
|
для: AlMag
(03.10.2008 в 03:03)
| | скорей всего его можно просто переопределить
а лучше найти примеры для Винды | |
|
|
|
|
|
|
|
для: GeorgeIV
(03.10.2008 в 17:30)
| | У меня получилось, спасибо. Только проблема в том, что клиент как бы общается с сервером, а мне нужно, что бы много клиентов можно было подключить к серверу.
как такие параллельный потоки создать? | |
|
|
|
|
|
|
|
для: AlMag
(04.10.2008 в 18:07)
| | http://www.citforum.ru/book/cook/winsock.shtml | |
|
|
|
|
|
|
|
для: GeorgeIV
(06.10.2008 в 13:34)
| | Спасибо, сейчас почитаю.
Ну а вообще принцып работы сервера какой? он ждет соединение с клиентом. когда таковое произошло - создает паралельный процесс для его обработки, а сам возвращается в исходную позицию ожидания? | |
|
|
|
|
|
|
|
для: AlMag
(07.10.2008 в 14:37)
| | Приблизительно так. А вообще реализаций серверов туева куча даже в SDK. Разбираться и разбираться. | |
|
|
|
|
|
|
|
для: GeorgeIV
(08.10.2008 в 18:57)
| | уже понемногу начинаю понимать. спасибо большое за пример. пока идет активный кодинг, спрошу еще пару вопросов, если не разберусь... | |
|
|
|
|
|
|
|
для: AlMag
(09.10.2008 в 15:48)
| | Ок, я все таки написал прокси и даже многопоточный. | |
|
|
|
|
|
|
|
для: GeorgeIV
(13.10.2008 в 18:40)
| | о, подскажите, каким окном делают главное окно в чате? "static"? или другим? | |
|
|
|
|
|
|
|
для: AlMag
(18.10.2008 в 21:57)
| | Обычным :-)
Через создание класса окна, его регистрацию и создание самого окна. | |
|
|
|
|
|
|
|
для: GeorgeIV
(20.10.2008 в 10:14)
| | не понял. это отдельное свое окно писать или делать как элемент окна? статик или эдитор, например. | |
|
|
|
|
|
|
|
для: AlMag
(20.10.2008 в 17:26)
| | Если делаете элемент окна, то должно быть и само окно | |
|
|
|
|
|
|
|
для: GeorgeIV
(22.10.2008 в 10:01)
| | ну это понятно) главное окно содержит кнопки "Сказать", "Выйти", "Коннектиться" (все "button"), есть поле ввода сообщения ("edit") и это главное окно, куда все отображается ("не знаю, какого типа")
Это меня интересует | |
|
|
|
|
|
|
|
для: AlMag
(22.10.2008 в 19:13)
| | Для таких случаев я писал свое окно "Memo", но можно использовать и STATIC, оно тоже вроде позволяет многострочный ввод, или RICHEDIT | |
|
|
|
|
|
|
|
для: GeorgeIV
(23.10.2008 в 12:48)
| | я не совсем понимаю, как это выглядит. можете шаблон показать? | |
|
|
|
|
|
|
|
для: AlMag
(24.10.2008 в 08:59)
| | ты реализуй для начала хотя бы вывод в STATIC, если все остальное будет работать, поменять статик на что то другое уже проще простого.
"Шаблон" класса мемо нереально показать здесь, это большой класс, с возможностью смены цвета, шрифта, размера, переноса строк по словам и т.п. Сам класс тоже наследуется от моего класса "окно" и применяется сабклассинг. Можно все это и на MFC замутить, но мне проще на своих компонентах, быстрее, компактнее, понятнее и практика хорошая | |
|
|
|
|
|
|
|
для: GeorgeIV
(24.10.2008 в 09:50)
| | я уже сделал типа Статик, осталось только конечные автоматы написать, что бы запросы обрабатывались на переименование, например. есть ссылка, что бы я мог освоить?
Вот, на MFC мне как раз не надо, чистое WinApi. | |
|
|
|