Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Как научить сервер(Visual C++) пониать определенные слова? 25.02.02 09:55
Автор: BigEye Статус: Незарегистрированный пользователь
|
написал сервер:
#include
#include
#define WINSOCK_VERSION 0x0101
void main()
{
WSADATA wsaData;
struct sockaddr add;
struct sockaddr_in addr;
int add_len;
add_len = sizeof(sockaddr);
int acc;
int sock;
char buf[1024];
(WSAStartup(WINSOCK_VERSION, &wsaData));
{
sock = socket(PF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(4000);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock,( struct sockaddr *) &addr, sizeof(sockaddr_in));
listen(sock,10);
acc = accept(sock,(struct sockaddr *) &add, &add_len);
{
do
{
recv(acc,buf,sizeof(buf),0);
}
while( strncmp("bye\r", buf,4) !=0);
}
}}
Как сделать чтобы он реагировал на определенные слова!? Я это сделал, но работает ОЧЕНЬ коряво! Как правильно? Есть ли ошибки в сервере? Скажите, если заметите! Спасибо заранее!
|
 |
корректней вопросы задавай (+ внутрь загляни) 28.02.02 06:13
Автор: йцукенг <jcukeng> Статус: Member
|
> listen(sock,10); константа 10 потрясает
особенно если учесть, что все делается в одной нити.
если уж ты не используешь WSA-ф-ии, используй многопоточность.
в данном случае у тебя сервер может обсуживать не более 1 клиента за раз.
это замечание, которые ты просил.
> Как сделать чтобы он реагировал на определенные слова!? Я > это сделал, но работает ОЧЕНЬ коряво! Как правильно? Есть > ли ошибки в сервере? Скажите, если заметите! Спасибо > заранее! честно говоря, ты плохо умеешь задавать вопросы. я, например, не понял твою проблему - ты что, слово bye в тексте не всегда распознаешь?
попробуй проверить вот что - выводи на печать или в лог все строки которые считывает программа после каждого recv и сравнивай с тем что посылал.
наверняка какое-нибудь "слово" считывается за два вызова recv, а не за один, как ты, видимо, ожидаешь.
PS. очень рекомендую скачать исходники BackOrifice2000 и немного поизучать. Очень полезно для начинающих винсокеров:).
|
|
|