Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

winsock2 клиент сервер connect 10035   Найти похожие ветки 

 
Rembo   (2008-08-23 12:24) [0]

Пишу я значит чат, взял пример серва из статьи королевства, там где неблокирующий режим с сообщениями, серв норм пашет, а клиент при конекте (на клик кнопки) выдает еррорину 10035, но все же конектиться (серв говорит) и с клиента текст шлеться а с серва на клиент не идет, или идет но не отображаеться (сообщения глючат по ходу). Клиент у меня тож неблокающие сокеты юзает (мож и зря ну не знаю). Если это реально, хотелось бы клиент сделать в блокирующем режиме с сообщениями...

Текст выше написал чтоб код ниже не читать (многа букаф), проблема вроде расспастраненная, сори за слэнг, настроение такое.
А вот код (КЛИЕНТ):
...
const
 WM_SocketEvent=WM_User+1;
...
WSAStartup($101,Data);
SK:=Socket(AF_Inet,Sock_Stream,0);
Addr.sin_family:=AF_Inet;
addr.sin_port:=HtoNS(7790);
Addr.sin_addr.S_addr:=Inet_Addr("127.0.0.1");
FillChar(Addr.sin_zero,SizeOf(Addr.sin_zero),0);
//Bind(SK,@Addr,SizeOf(Addr)); - хз надо это или не
WSAAsyncSelect(SK,Handle,
     WM_SocketEvent,FD_Read or FD_Close or FD_CONNECT or FD_Accept);
...
procedure TForm1.WMSocketEvent(var Msg:TMessage);
var Sock:TSocket;
    SockError:Integer;
 begin
  Sock:=TSocket(Msg.WParam);
  SockError:=WSAGetSelectError(Msg.lParam);
  if SockError<>0 then
   begin
   memo1.lines.add("["+inttostr(SockError)+"]Ошибка! Закрываем сокет...");
    CloseSocket(Sock);
    Exit
   end;
  case WSAGetSelectEvent(Msg.lParam) of
   FD_Read:
    begin
     RECV(msg.WParam,buf,sizeof(buf),0);
     memo1.Lines.Add("Сообщение от сервера: "+buf);
    end;
   FD_Accept:
    begin
     memo1.lines.add("Подключен!");
    end;
   FD_Close:
    begin
     memo1.Lines.Add("Отключение от сервера");
     Shutdown(Sock,SD_Send);
     CloseSocket(Sock)
    end;
   FD_Connect:
     begin
     Connect(SK,@Addr,SizeOf(Addr));
     memo1.lines.add("Подключен!");
     end
  end
 end;

Сервер:
procedure TForm1.FormCreate(Sender: TObject);
var Data:TWSAData;
    Addr:TSockAddr;
 begin
  WSAStartup($101,Data);
  ServSock:=Socket(AF_Inet,Sock_Stream,0);
  Addr.sin_family:=AF_Inet;
  addr.sin_port:=HtoNS(7790);
  Addr.sin_addr.S_addr:=Inet_Addr("127.0.0.1");
  FillChar(Addr.sin_zero,SizeOf(Addr.sin_zero),0);
  Bind(ServSock,@Addr,SizeOf(Addr));
  Listen(ServSock,SOMaxConn);
  WSAAsyncSelect(ServSock,Handle,
                 WM_SocketEvent,FD_Read or FD_Accept or FD_Close);
end;

procedure TForm1.WMSocketEvent(var Msg:TMessage);
var Sock:TSocket;
    SockError:Integer;
 begin
  Sock:=TSocket(Msg.WParam);
  SockError:=WSAGetSelectError(Msg.lParam);
  if SockError<>0 then
   begin
    CloseSocket(Sock);
    memo1.lines.add("["+inttostr(SockError)+"]Ошибка! Закрываем сокет...");
    Exit
   end;
  case WSAGetSelectEvent(Msg.lParam) of
   FD_Read:
    begin
      RECV(msg.WParam,buf,sizeof(buf),0);
      memo1.Lines.Add("Сообщение от клиента: "+buf);
      buf:="Сообщение получено! ("+buf+")";
      Send(msg.WParam,buf,sizeof(buf),0);
    end;
   FD_Accept:
    begin
     Accept(Sock,nil,nil);
     memo1.lines.add("["+inttostr(WSAGetLastError)+"]Клиент подключен");
    end;
   FD_Close:
    begin
     Shutdown(Sock,SD_Send);
     CloseSocket(Sock);
     memo1.lines.add("["+inttostr(SockError)+"]Клиент отключился...");
    end
  end
 end;

Так вот проблема: ответ от серва в клиенте не выдает.
Заранее спасибо.


 
grisme ©   (2008-08-23 14:36) [1]

WSAEWOULDBLOCK

(10035)

Resource temporarily unavailable.

This error is returned from operations on non-blocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a non-fatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a non-blocking SOCK_STREAM socket, since some time must elapse for the connection to be established.


 
Rembo   (2008-08-23 15:23) [2]

Пасиба, я знаю что оно означает, хотел бы узнать где ошибка в клиенте, почему он не отображает текст присылаемый с сервака


 
Тын-Дын ©   (2008-08-23 17:58) [3]


> а клиент при конекте (на клик кнопки)


Ну и где этот код при нажатии кноки? Код подключения?


 
Rembo   (2008-08-23 20:44) [4]

procedure TForm1.Button1Click(Sender: TObject);
begin
Connect(SK,@Addr,SizeOf(Addr));
end;


 
grisme ©   (2008-08-24 12:05) [5]

а почему тогда у тебя в FD_CONNECT ещё раз вызывается connect? м?


 
Rembo   (2008-08-24 18:16) [6]

а это уже эксперименты, прежде чем сюда лезть пробовал по всякому, изначально конект был на кнопке а в FD_CONNECT его небыло, и выдавал ошибку.


 
Сергей М. ©   (2008-08-24 21:05) [7]


> а это уже эксперименты


А какие могут быть "экспереименты", если событие говорит о факте коннекта ?


> КЛИЕНТ


> FD_Accept:


А это что за "эксперименты" ?

FD_ACCEPT - это событие исключительно серверной стороны !
На стороне клиента оно никогда не возникнет.
Зато и на серверной и на клиентской сторонах крайне выжным является событие FD_WRITE, реакция  на которое у тебя отсутствует вообще.


 
ass   (2008-09-13 23:51) [8]

Сергей умный чувак


 
Сергей М. ©   (2008-09-14 16:02) [9]


> ass   (13.09.08 23:51) [8]


"Чуваки" - они в подворотне, за клинским бегают)


 
Григорьев Антон ©   (2008-09-15 12:09) [10]

Проще всего делать соединение в блокирующем режиме, а WSAAsyncSelect вызывать после Connect.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.062 c
6-1222066908
Michael
2008-09-22 11:01
2010.08.27
Именованые каналы - сетевое использование


8-1204640132
Ламер
2008-03-04 17:15
2010.08.27
Bass player


2-1274254857
lock95
2010-05-19 11:40
2010.08.27
поиск одинаковых частей в двух бинарных файлах


15-1272391343
GanibalLector
2010-04-27 22:02
2010.08.27
Обрыв сетевого подключения. Как?


2-1275392674
defen
2010-06-01 15:44
2010.08.27
приоритет службы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский