Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Вниз

Нууу... вопрос по сокетам <совсем маленький> 


Velocity   (2002-01-07 11:03) [0]

Итак, кусочек кода гляньте... Простой такой сервер.
program Console_server;
{$APPTYPE CONSOLE}
uses
Windows, Winsock;
const
nport:smallint = 500;
var
WSAData:TWSAData;
MySockAddr:sockaddr_in;
srvsocket,descriptor:TSocket;
dlina,rcvd_bytes:integer;
buffer:array [0..255] of Char;
res:cardinal;
procedure InitializeSocket;
begin
buffer:=#0;
res:=WSAStartup($0101,WSAData);
if res<>0 then Halt;
MySockAddr.sin_addr.S_addr:=INADDR_ANY;
MySockAddr.sin_port:=htons(nport);
MySockAddr.sin_family:=AF_INET;
descriptor:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if descriptor=INVALID_SOCKET then Halt;
dlina:=SizeOf(MySockAddr);
res:=bind(descriptor,MySockAddr,dlina);
if res<>0 then Halt;
res:=listen(descriptor,SOMAXCONN);
if res<>0 then Halt;
end;
procedure ReleaseSocket;//это на будущее - грамотно закрыть...
begin
closesocket(srvsocket);
closesocket(descriptor);
WSACleanUp;
end;
begin
InitializeSocket;
while true do begin
srvsocket:=accept(descriptor,nil,nil);
if srvsocket=INVALID_SOCKET then Halt;
rcvd_bytes:=recv(srvsocket,buffer,Length(buffer),MSG_PEEK);
MessageBox(0,buffer,"title",MB_OK);
end;
end.

команда:
rcvd_bytes:=recv(srvsocket,buffer,Length(buffer),MSG_PEEK);
далее, посылаю куда положено строку. данные в буфер я получаю один раз, т.е. первый раз мессага вываливается - любо-дорого. вот как теперь сокет сервера (именно уже соединенный) снова настроить на прием данных? какой командой? помогите плиз.



samuray   (2002-01-07 12:12) [1]

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

для этого вставь такую строку

ioctlsocket(srvsocket, FIONREAD, PackLen);
GetMem(Buff, PackLen);
PackRec := recv(srvsocket, Buff^, PackLen, 0);
Res := Buff; //здесь то что принял!!
где
PackLen : Cardinal;
PackRec : Integer;
Buff : PChar;
Res : string;



Velocity   (2002-01-09 13:57) [2]

Очень большое спасибо.




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.25;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.013 c
14-80663          Merlin                2002-02-11 13:00  2002.03.25  
test


3-80431           MetallAdm             2002-02-27 11:13  2002.03.25  
Хех Филтрация или как ? Нужно в табличке ненужные надписи убирать


3-80397           Demon ltd             2002-02-20 15:22  2002.03.25  
работа с Qreport ом


1-80541           XeN                   2002-03-06 19:33  2002.03.25  
Listbox HScrollbar


1-80465           Starkom               2002-03-12 09:55  2002.03.25  
Как программно раскрыть выпадающий список в TComboBox?