Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

20.02.2009, 19:24
|
|
Участник форума
Регистрация: 27.04.2008
Сообщений: 224
Провел на форуме: 140661
Репутация:
313
|
|
Открытие сокета.
Пытаюсь открыть на прослушивание порт 8080 на адресе 127.0.0.1. Использую следующий код:
Код:
WSADATA wsaData;
SOCKET inSocket,outSocket;
sockaddr_in laddr,caddr;
laddr.sin_family = AF_INET;
laddr.sin_port = 8080;
laddr.sin_addr.s_addr = inet_addr("127.0.0.1");
WSAStartup(MAKEWORD(2,2), &wsaData);
inSocket = socket(AF_INET,SOCK_STREAM,0);
bind(inSocket,(struct sockaddr*)&laddr,sizeof(laddr));
for(;;) {
//sleep(300);
listen(inSocket,10);
outSocket=accept(inSocket,(sockaddr*)&caddr,(int *)sizeof(caddr));
}
Всё собирается и запускается без ошибок. Но пробую телнетом коннектится на адрес 127,0,0,1 и порт 8080 - соединения нет. В чём проблема?
И второй вопрос. В коде "sleep(300)" закомментирован т.к. при сборке вылазеет ошибка: "'sleep': identifier not found" - как с этим бороться? В инете нашёл 2 варианта - подключить dos.h или time.h. Ни один из них не помог. Использую VS2008 Express.
Заранее благодарен.
|
|
|

20.02.2009, 19:36
|
|
Познающий
Регистрация: 01.03.2008
Сообщений: 99
Провел на форуме: 613745
Репутация:
51
|
|
На счёт sleep - пробуй с подключённым windows.h
|
|
|

20.02.2009, 19:40
|
|
Новичок
Регистрация: 04.02.2009
Сообщений: 12
Провел на форуме: 18348
Репутация:
0
|
|
Компилятор чувствителен к регистру в MSDN описание функции Sleep такое VOID WINAPI Sleep(__in DWORD dwMilliseconds); так что пробуй Sleep. Насчет сокетов проверяй можегт какие ошибки функции возвращают, лгече будет причину найти
Последний раз редактировалось Maxidrom; 20.02.2009 в 19:45..
|
|
|

20.02.2009, 20:56
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
listen не там поставил )
и в номере порта забыл прогнать через htons
вот код работающий:
Код:
WSAStartup(MAKEWORD(2,2), &wsaData);
lsocket = socket(AF_INET, SOCK_STREAM, 0);
laddr.sin_family = AF_INET;
laddr.sin_port = htons(8080); // htons всегда нужен
laddr.sin_addr.s_addr = INADDR_ANY; // в моём случая для всех интерфейсов
if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;
if (listen(lsocket, 0x100)) return -1;
printf("wait for connection...\n");
while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size)))
{
вот тут теперь с csocket что хочешь то и делай типа
send(csocket, buff, strlen(buff), 0);
}
Последний раз редактировалось slesh; 20.02.2009 в 21:03..
|
|
|

21.02.2009, 00:07
|
|
Участник форума
Регистрация: 27.04.2008
Сообщений: 224
Провел на форуме: 140661
Репутация:
313
|
|
slesh, спасибо, всё работает. Maxidrom, действительно из-за регистра не работало =).
Образовалась ещё одна проблема. Читаю данные вот так:
Код:
while((outSocket=accept(inSocket, (struct sockaddr *) &caddr, (int*)sizeof(caddr)))) {
recv(outSocket,buf,1024,0);
richTextBox1->Text = buf;
Sleep(500);
}
Как видите пытаюсь то что пришло на вход поместить в текстовое поле компонента "RichTextBox". Я понимаю что я всё делаю не правильно, т.к. компилятор мне об этом говорит, но как мне преобразовать то что пришло в тип "String", что бы засунуть в текст-бокс (придёт обычный http-запрос)? Переменную buf я объявляю вот так:
Код:
char *buf = new char[1024];
И вторая проблема - программа после запуска зависает (у меня оконный вариант с формой). Думал что Sleep(500) поможет, но ошибся. Скажите как убрать эти подвисания.
Последний раз редактировалось Kuzya; 21.02.2009 в 00:12..
|
|
|

24.02.2009, 16:31
|
|
Новичок
Регистрация: 28.01.2009
Сообщений: 4
Провел на форуме: 6374
Репутация:
0
|
|
Ты используешь блокирующий режим, в нём функции recv, send, accept и connect блокируют программу до тех пор, пока не появятся данные в буфере или не подключится клиент. Чтобы избавиться от этого accept`и клиентов в отдельном потоке и каждого клиента определяй в отдельный поток.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|