我现在用标准SOCKET编写SERVER/CLIENT 程序,我想请教各位高手在SEND()和RECV()对于字符串怎么处理?例如我想发送‘ABCDEFG’字符串,该怎么写?
解决方案 »
- 有TLabelExt控件吗
- 请问有没有这样一个完全的分布式系统
- 怎样使swf背景透明
- 请问如何在 directX 的游戏中获取屏幕上某一点的颜色值?
- 100分求一答案:如何在程序中控制IE浏览器打开一指定网址
- 得已肝三年了,也许在临死前我能做一个全国最优秀的动态构造系统.
- 小弟对Delphi一无所知,请各位GG、JJ请帮忙!!!
- 释放了没?
- 请教问题:当转换不成功的时候,怎么不抛出系统异常而是弹出我写的messagebox??谢谢!
- !!!!如何使DBGrid某列所有的内容显示为“*”,相当于Edit.PassWordChar功能!!!
- ★Delphi的控制台程序中有没有方法直接判断按下的按键,就像是TP7.0中的readkey,而不用输入回车键?
- 送分~如何的到我的WebBrowser的父控件的信息?
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 的函数不记得了,可以查一下
//大概是这个意思