assignfile(f1,'temp.txt');
reset(f1);
repeat
readln(f1,temp);
st_out:=st_out+temp;
until eof(f1);
close(f1);
send(s_clnt, st_out, length(st_out), 0);
послать строку в сокет
Код:
клиент принимает так:
Код:
msg:=socket.ReceiveText;
memo1.Lines.Add(msg);
memo1.Lines.Add(msg);
но в мемо отображается какаято фигня, и то символов 10 максимум, это при том что файл весит 1 кб...
Код:
var Buf: array[1..65384] of char;
Len: integer;
begin
Len:=socket.ReceiveBuf(Buf,65384);
...
Len: integer;
begin
Len:=socket.ReceiveBuf(Buf,65384);
...
тока вот патом не знаю как патом Buf в мемо запихнуть...memo1.lines.add(buf);...выводит нулевой байт строки, тоесть размер всей строки и все...
Код:
...
var RBuff: array [0..255] of Char;
strr: string;
...
strr:='';
while recv(FSocket, RBuff, 255, 0)>0 do begin
strr:=strr+string(rbuff);
FillChar(RBuff,255,#0);
end;
memo1.lines.add(strr);
...
var RBuff: array [0..255] of Char;
strr: string;
...
strr:='';
while recv(FSocket, RBuff, 255, 0)>0 do begin
strr:=strr+string(rbuff);
FillChar(RBuff,255,#0);
end;
memo1.lines.add(strr);
...
Возможно, что-то неправильно(писал без Delphi), но, как мне кажется, должно помочь.
Код:
var Buf: array[1..65384] of char;
Len: integer;
begin
Len:=socket.ReceiveBuf(Buf,65384);
...
Len: integer;
begin
Len:=socket.ReceiveBuf(Buf,65384);
...
Но может ктонибудь знает как патом работать с этим Buf?
Код:
memo1.lines.add(string(Buf));
Код:
...
var str: string;
...
str:=copy(Buf,1,Len);
...
var str: string;
...
str:=copy(Buf,1,Len);
...
Код:
Len:=socket.ReceiveBuf(Buf,65384);
for i:=1 to len do begin
memo1.Text:=memo1.Text+buf;
end;
for i:=1 to len do begin
memo1.Text:=memo1.Text+buf;
end;
то что то отображается, но пачемуто далеко не все, т.к. длина пакета гораздо больше...
Код:
...
uses
..., WinSock;
...
const
header='GET http://server.com/page.html HTTP/1.0'+#13#10+
'Accept: */*'+#13#10#13#10#0;
var
WSAData: TWSAData;
FSocket: integer;
SockAddrIn: TSockAddrIn;
Str: array [0..255] of Char;
RBuff: array [0..255] of Char;
strr:string;
...
function d_addr(IPaddr : string) : Cardinal;
var
pa: PChar;
sa: TInAddr;
Host: PHostEnt;
begin
Result:=inet_addr(PChar(IPaddr));
if inet_addr(PChar(IPaddr))=INADDR_NONE then
begin
host:=GetHostByName(PChar(IPaddr));
if Host = nil then
exit
else
begin
pa := Host^.h_addr_list^;
sa.S_un_b.s_b1 := pa[0];
sa.S_un_b.s_b2 := pa[1];
sa.S_un_b.s_b3 := pa[2];
sa.S_un_b.s_b4 := pa[3];
with TInAddr(sa).S_un_b do
Result:=inet_addr(PChar(IntToStr(Ord(s_b1)) + '.' + IntToStr(Ord(s_b2)) + '.' +
IntToStr(Ord(s_b3)) + '.' + IntToStr(Ord(s_b4))));
end;
end;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
if WSAStartup($101, WSAData)<>0 then memo1.Lines.Add('error starting up windows sockets');
FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(strtoint(Edit2.Text));
SockAddrIn.sin_addr.s_addr := d_addr(Edit1.Text);
if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> -1 then
begin
lstrcpy(Str, PChar(header));
send(FSocket, Str, lstrlen(Str), 0);
FillChar(RBuff,255,#0);
strr:='';
while recv(FSocket, RBuff, 255, 0)>0 do begin
strr:=strr+string(rbuff);
FillChar(RBuff,255,#0);
end;end;
closesocket(FSocket);
WSACleanup;
strr:=copy(strr,pos('<',strr),lstrlen(@strr[1])-pos('<',strr));
memo1.lines.add(strr);
end;
...
uses
..., WinSock;
...
const
header='GET http://server.com/page.html HTTP/1.0'+#13#10+
'Accept: */*'+#13#10#13#10#0;
var
WSAData: TWSAData;
FSocket: integer;
SockAddrIn: TSockAddrIn;
Str: array [0..255] of Char;
RBuff: array [0..255] of Char;
strr:string;
...
function d_addr(IPaddr : string) : Cardinal;
var
pa: PChar;
sa: TInAddr;
Host: PHostEnt;
begin
Result:=inet_addr(PChar(IPaddr));
if inet_addr(PChar(IPaddr))=INADDR_NONE then
begin
host:=GetHostByName(PChar(IPaddr));
if Host = nil then
exit
else
begin
pa := Host^.h_addr_list^;
sa.S_un_b.s_b1 := pa[0];
sa.S_un_b.s_b2 := pa[1];
sa.S_un_b.s_b3 := pa[2];
sa.S_un_b.s_b4 := pa[3];
with TInAddr(sa).S_un_b do
Result:=inet_addr(PChar(IntToStr(Ord(s_b1)) + '.' + IntToStr(Ord(s_b2)) + '.' +
IntToStr(Ord(s_b3)) + '.' + IntToStr(Ord(s_b4))));
end;
end;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Clear;
if WSAStartup($101, WSAData)<>0 then memo1.Lines.Add('error starting up windows sockets');
FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(strtoint(Edit2.Text));
SockAddrIn.sin_addr.s_addr := d_addr(Edit1.Text);
if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> -1 then
begin
lstrcpy(Str, PChar(header));
send(FSocket, Str, lstrlen(Str), 0);
FillChar(RBuff,255,#0);
strr:='';
while recv(FSocket, RBuff, 255, 0)>0 do begin
strr:=strr+string(rbuff);
FillChar(RBuff,255,#0);
end;end;
closesocket(FSocket);
WSACleanup;
strr:=copy(strr,pos('<',strr),lstrlen(@strr[1])-pos('<',strr));
memo1.lines.add(strr);
end;
...