我现在用标准SOCKET编写SERVER/CLIENT 程序,我想请教各位高手在SEND()和RECV()对于字符串怎么处理?例如我想发送‘ABCDEFG’字符串,该怎么写?

解决方案 »

  1.   

    var
       str_buffer:string;
    begin
        str_buffer:='ABCDEFG’
        send(str_buffer,sizeof(str_buffer),0);
    end;
      

  2.   

    那SERVER端接收呢?解决马上给分!
      

  3.   

    ServerSocketClientRead事件中:
    Memo1.Lines.Add(Socket.ReceiveText); 
      

  4.   

    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;
      

  5.   

    而SERVER端也用WINDOWS API函数,
      

  6.   

    请问linx88(haozi) 写入MEMO1中怎么写?
      

  7.   

    接收端也是用WINDOWS API 函数
      

  8.   

    linx88(haozi) 能不能写成代码,非常感谢!50分属于你的
      

  9.   

    给你一个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;
      

  10.   

    简单点
    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 的函数不记得了,可以查一下  
    //大概是这个意思