Показать сообщение отдельно
  #8  
Старый 13.08.2009, 20:27
одинадцатый одинадцатый вне форума
Новичок
 
Регистрация: 16.04.2009
Сообщения: 95
Репутация: 10
По умолчанию

Так отставить инди! С сокетами сделал. теперь получше.
От меня товарищу идет и от клиента и от сервера. от него ко мне идет только от сервера, ошибка все та же - 10060. Хотя от него до другого адреса идет и от того и от того. у меня в проге ip определяется при formcreate. а когда к нему на серв сообющение приходит от меня (клиента) ип пишется совсем другой. нам кжется что в этом проблема.

И еще такая ошибка: Невозможно выполнить операцию на сокете, т.к. буфер обмена мал или очередь переполнена. появляется при активации клиента иногда. что с ним?

что делать господа?

исходники:

Сервер:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient,Winsock, IdTCPServer, ScktComp, ComCtrls;

type
  TForm1 = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    Button3: TButton;
    Button4: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit6: TRichEdit;
    edit7: TRichEdit;
    ServerSocket1: TServerSocket;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
  result:string;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
form1.Caption:='Server   ip - ' + result;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i: byte;
begin
  with ServerSocket1.Socket do
  begin
    if ActiveConnections>0 then
      for i := 0 to ActiveConnections - 1 do
      try
        Connections[i].SendText(edit6.Text);
        Application.ProcessMessages;
      except
        //
      end;
  end; {/WITH}
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
edit7.Text:=socket.ReceiveText;
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Str: string;
  RemIP: string;
begin
  label1.Caption :='Последнее сообщение с ip - ' +  Socket.RemoteAddress;
  edit7.Text := Socket.ReceiveText;
end;

end.

клиент:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient,Winsock, IdTCPServer, ScktComp, ComCtrls;

type
  TForm1 = class(TForm)
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button3: TButton;
    Edit8: TEdit;
    Button4: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    ClientSocket1: TClientSocket;
    Edit6: TRichEdit;
    edit7: TRichEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
  result:string;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
form1.Caption:='client   ip - ' + result;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i: byte;
begin
  with clientSocket1.Socket do
  begin
      try
        sendtext(edit6.text);
      except
        //
      end;
  end; {/WITH}
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
clientsocket1.Active:=false;
clientsocket1.Address:=edit8.Text;
clientsocket1.Active:=true;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
edit7.Text:=socket.ReceiveText;
end;

end.
Ответить с цитированием