var pbuf:pchar; ret,idx:integer; begin getmem(pbuf,len); //len 足够长 ret:=Recv(s,pbuf[idx],len,0); while ret>0 do begin idx:=idx+ret; ret:=Recv(s,pbuf[idx],len,0); end; FreeMem(pbuf); end;
而SERVER端也用WINDOWS API函数,
请问linx88(haozi) 写入MEMO1中怎么写?
接收端也是用WINDOWS API 函数
linx88(haozi) 能不能写成代码,非常感谢!50分属于你的
给你一个udp的例子 Client端 var c_addr:sockaddr_in; s:integer; _sndBuf:array[0..9]; BROADCAST: boolean;begin s:=socket(af_inet,sock_dgram,ipproto_ip); try c_addr.sin_family:=af_inet; c_addr.sin_port:=8080; c_addr.sin_addr.S_addr:=inet_addr('192.168.0.11')); sendto(s,@_sndBuf[0],sizeof(_sndBuf),0,c_addr,sizeof(sockaddr_in)); finally closesocket(s); end; end; Server端 var Recvsocket:integer; var _WSAdata:TWSADATA; addr:sockaddr_in; begin wsastartup(makeword(2,2),_WSAdata); Recvsocket:=socket(af_inet,SOCK_DGRAM,IPPROTO_IP); addr.sin_family:=af_inet; addr.sin_port:=8080; addr.sin_addr.S_addr:=htonl(INADDR_ANY); bind(Recvsocket,addr,sizeof(sockaddr_in)); wsaasyncselect(Recvsocket,self.Handle,WM_RECV,FD_READ); end; procedure TFrmMain.RecvData(var msg: Tmessage); var c_addr:sockaddr_in; _Rcvbuf:array[0..9]of char; begin addr_len:=sizeof(sockaddr_in); if recvfrom(Recvsocket,@_Rcvbuf[0],sizeof(_Rcvbuf),0,_sockaddr,addr_len)<> 0 then begin memo1.lines.add(_Rcvbuf); end; end;
简单点 var str : string ; buf : pointer ; begin str := 'hhhhhh' ; getmem(buf,sizeof(str)) ; strpas(str,buf) ; //不太记得转换函数了,好象是 send(socket.handle,buf^,sizeof(buf),0) ; freemem(buf) ; end ; //接收端 var str : string ; buf : pchar ; begin getmem(buf,1024) ; //你可以让client端把大小发过来,假如是1024 Recv(socket.handle,buf^,sizeof(buf),0) ; strpcopy(str,buf) ; //不太记得转换函数了,好象是 memo1.lines.add(str) ; freemem(buf) ; end ; //有写char to pchar 的函数不记得了,可以查一下 //大概是这个意思
str_buffer:string;
begin
str_buffer:='ABCDEFG’
send(str_buffer,sizeof(str_buffer),0);
end;
Memo1.Lines.Add(Socket.ReceiveText);
pbuf:pchar;
ret,idx:integer;
begin
getmem(pbuf,len); //len 足够长
ret:=Recv(s,pbuf[idx],len,0);
while ret>0 do
begin
idx:=idx+ret;
ret:=Recv(s,pbuf[idx],len,0);
end;
FreeMem(pbuf);
end;
Client端
var
c_addr:sockaddr_in;
s:integer;
_sndBuf:array[0..9];
BROADCAST: boolean;begin
s:=socket(af_inet,sock_dgram,ipproto_ip);
try
c_addr.sin_family:=af_inet;
c_addr.sin_port:=8080;
c_addr.sin_addr.S_addr:=inet_addr('192.168.0.11'));
sendto(s,@_sndBuf[0],sizeof(_sndBuf),0,c_addr,sizeof(sockaddr_in));
finally
closesocket(s);
end;
end;
Server端 var Recvsocket:integer;
var
_WSAdata:TWSADATA;
addr:sockaddr_in;
begin
wsastartup(makeword(2,2),_WSAdata);
Recvsocket:=socket(af_inet,SOCK_DGRAM,IPPROTO_IP);
addr.sin_family:=af_inet;
addr.sin_port:=8080;
addr.sin_addr.S_addr:=htonl(INADDR_ANY);
bind(Recvsocket,addr,sizeof(sockaddr_in));
wsaasyncselect(Recvsocket,self.Handle,WM_RECV,FD_READ);
end;
procedure TFrmMain.RecvData(var msg: Tmessage);
var
c_addr:sockaddr_in;
_Rcvbuf:array[0..9]of char;
begin
addr_len:=sizeof(sockaddr_in);
if recvfrom(Recvsocket,@_Rcvbuf[0],sizeof(_Rcvbuf),0,_sockaddr,addr_len)<> 0 then
begin
memo1.lines.add(_Rcvbuf);
end;
end;
var
str : string ;
buf : pointer ;
begin
str := 'hhhhhh' ;
getmem(buf,sizeof(str)) ;
strpas(str,buf) ; //不太记得转换函数了,好象是
send(socket.handle,buf^,sizeof(buf),0) ;
freemem(buf) ;
end ;
//接收端
var
str : string ;
buf : pchar ;
begin
getmem(buf,1024) ; //你可以让client端把大小发过来,假如是1024
Recv(socket.handle,buf^,sizeof(buf),0) ;
strpcopy(str,buf) ; //不太记得转换函数了,好象是
memo1.lines.add(str) ;
freemem(buf) ;
end ; //有写char to pchar 的函数不记得了,可以查一下
//大概是这个意思