请问有关于Socket应用程序的例子吗?很急喔

解决方案 »

  1.   

    The following example shows a typical ClientExecute method for a custom descendant of TServerClientThread. It reads from the socket connection specified by ClientSocket using a thread-local instance of TWinSocketStream.procedure TMyServerThread.ClientExecute;var
      Stream : TWinSocketStream;
      Buffer : array[0 .. 9] of Char;
    begin
      { make sure connection is active }
      while (not Terminated) and ClientSocket.Connected do
      begin
        try
          Stream := TWinSocketStream.Create(ClientSocket, 60000);
          try
            FillChar(Buffer, 10, 0); { initialize the buffer }
            { give the client 60 seconds to start writing }
            if Stream.WaitForData(60000) then          begin
              if Stream.Read(Buffer, 10) = 0 then { if can抰 read in 60 seconds }
                ClientSocket.Close;               { close the connection }
              { now process the request }
              ...
            end
            else
              ClientSocket.Close; { if client doesn抰 start, close }
          finally
            Stream.Free;
          end;
        except
          HandleException;    end;
      end;
    end;
      

  2.   

    多得不得了了, 不过我只知道VC的怎么做,其实每种语言都是相通的
    找一个VC用API函数做的socket程序看看,很多
    http://www.vckbase.com/
      

  3.   

    [email protected]麻烦麻烦,很急喔,麻烦老大门给我发些例子
      

  4.   

    我KAO..shootgz(半支烟) 
    你这土人..DELPHI自带不是有DEMO吗??你不会看看..比一般的人写的还要好..
      

  5.   

    我正在写的一个局域网聊天的程序,还没有写完,给你发了吧。
    serverprocedure TzypNeoForm.ServerSocket1ClientWrite(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    j:integer;
    begin
    case i of
    1:begin
       for j:=serversocket1.Socket.ActiveConnections-1 downto 0 do
       begin
       serversocket1.Socket.Connections[j].SendText('++大家请注意,有系统广播-----'+edit1.text);
       end;
      richedit1.ReadOnly:=false;
      RichEdit1.SelAttributes.Color := clRed;
      richedit1.lines.add('大家请注意,有系统广播-----'+edit1.text);
      RichEdit1.SelAttributes.Color :=clWindow;
      edit1.clear;
      richedit1.readonly:=true;
      end;
    end;
    end;procedure TzypNeoForm.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
    begin
    key:=#0;
    if not (trim(edit1.text)='') then
    begin
    i:=1;
    serversocket1.OnClientWrite(self,serversocket1.socket);
    end;
    end;
    end;procedure TzypNeoForm.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    cc,bb,dd,ll:string;
    i,j,k,z,zz:integer;
    mydata:tstringlist;
    begin
    bb:=socket.ReceiveText;
    if copy(bb,1,8)='username' then
        begin
          mydata:=tstringlist.Create;
          i:=ListView1.Items.Add.Index;
          ListView1.Items.Item[i].Caption:=IntToStr(Socket.SocketHandle);
          ListView1.Items.Item[i].SubItems.add(copy(bb,9,length(bb)));
    {      button1.Click;}
          {for z:=0 to listview1.Items.Count-1 do
           begin
            mydata.Add(listview1.Items.Item[z].SubItems.Text);
           end;}
           {mydata.Add('aaaaaaaa');
          for zz:=0 to serversocket1.Socket.ActiveConnections-1 do
          begin
          serverSocket1.socket.Connections[0].sendbuf(MyData,sizeof(MyData));
          end;
          {for z:=serversocket1.Socket.ActiveConnections-1 downto 0 do
       begin
       serversocket1.Socket.Connections[z].SendText('addusername'+copy(bb,9,length(bb)));
       end;}
        end;if copy(bb,1,10)='isendtoall' then
        begin
          cc:=copy(bb,11,length(bb));
          for j:=serversocket1.Socket.ActiveConnections-1 downto 0 do
             begin
              serversocket1.Socket.Connections[j].SendText(ListView1.FindCaption(0,IntToStr(Socket.SocketHandle),true,true,true).subitems.text+'说:'+cc);
             end;
          richedit1.Lines.Add(ListView1.FindCaption(0,IntToStr(Socket.SocketHandle),true,true,true).subitems.text+'说:'+cc);
          SendMessage(richedit1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
        end;if copy(bb,1,13)='isendtoanyone' then
        begin
          k:=pos('々',bb);
          dd:=copy(bb,k+2,length(bb));
          k:=pos('々',dd);
          ll:=dd;
          copy(ll,k+2,length(ll));{ll为要发送的信息}
          delete(dd,k,length(dd)); {dd是对哪个昵称发送信息}
        end;end;
    procedure TzypNeoForm.Button1Click(Sender: TObject);
    var
    mydata:tstringlist;
    begin
    mydata:=tstringlist.create;
    mydata.add('1');
    mydata.add('1');
    serverSocket1.socket.Connections[0].sendbuf(MyData,sizeof(MyData));
    end;
      

  6.   

    clientprocedure Tform1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    aa,bb:string;
    ilen:integer;
    mydata:tstringlist;
    begin
    {  aa:=socket.ReceiveText;}
      mydata:=tstringlist.create;
      iLen := Socket.ReceiveLength;
      Socket.ReceiveBuf(MyData,iLen);
      memo1.lines.add(mydata.text);
    {if copy(aa,1,11)='addusername' then
        begin
        delete(bb,1,11);
        listbox1.Items.Add(bb);
        aa:='';
        end;if pos('++大家请注意,有系统广播-----',aa)<>0 then
        begin
           if not (copy(aa,32,length(aa))='') then
              begin
                richedit1.readonly:=false;
                RichEdit1.SelAttributes.Color := clRed;
                aa:=Copy(aa,5,Length(aa));
                richedit1.lines.add(aa);
                RichEdit1.SelAttributes.Color :=clWindow;
                richedit1.ReadOnly:=true;
                SendMessage(richedit1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
              end;
        end
                                                     else}
    begin
    {richEdit1.SelAttributes.Color :=clWindow;
    richedit1.lines.add(aa);
    SendMessage(richedit1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);}end;
    end;
    procedure Tform1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    form1.StatusBar1.Panels[0].Text:='连接成功';
    form1.Panel1.Enabled:=true;
    form2.showmodal;
    end;procedure Tform1.N2Click(Sender: TObject);
    begin
    form1.ClientSocket1.Active:=true;
    end;procedure Tform1.Timer1Timer(Sender: TObject);
    begin
    form1.StatusBar1.Panels[1].text:=datetimetostr(now);
    end;procedure Tform1.N4Click(Sender: TObject);
    begin
    close;
    end;procedure Tform1.N3Click(Sender: TObject);
    begin
    form1.ClientSocket1.Active:=false;
    form1.Panel1.Enabled:=false;
    end;procedure tform1.sendusername;
    begin
    clientsocket1.socket.SendText('username'+username);
    end;
    procedure Tform1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
    begin
    key:=#0;
    if ((combobox1.Text='') and (edit1.text='')) or ((combobox1.Text='') or (edit1.text='')) then
    begin
    messagebox(handle,'1,请选择您要聊天的对象'#10#13+'2,请不要发送空信息!','错误!!',mb_ok);
    end
    else
    begin
    if (not checkbox1.Enabled) and (combobox1.Text='全体') then clientsocket1.Socket.SendText('isendtoall'+edit1.text);{向全体发送消息}
    if (checkbox1.Enabled) and (checkbox1.checked) and (combobox1.Text<>'全体') then clientsocket1.Socket.SendText('isendtoanyone'+'々'+combobox1.text+'々'+edit1.text);
    end;
    end;
    end;procedure Tform1.ComboBox1Click(Sender: TObject);
    begin
    if combobox1.text='全体' then form1.CheckBox1.enabled:=false
                             else form1.CheckBox1.enabled:=true;
    end;