读书人

请问:小弟我这样的情况需要怎样处理?

发布时间: 2012-03-20 14:01:11 作者: rapoo

请教:我这样的情况需要怎样处理?(SOCKET 怎么使服务器和客户端建立连接)谢谢!
请教:
是这样的,
我有服务器端和客户端,
用 serversocket 和 clientsocket 来通信,

客户端不知道服务器的 IP 地址, 服务器知道客户端的 IP 地址,

假设,先运行客户端:

客户端程序如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp;

type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
procedure FormCreate(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
IP:string;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ClientSocket1.Open;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode:=0;
end;

end.


服务器:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
ServerSocket1.Socket.RemoteAddress:= '192.168.0.118 ';
ServerSocket1.Socket.SendText( 'dfdf ');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Socket.RemoteAddress:= '192.168.0.119 ';
ServerSocket1.Socket.SendText( 'dfdf ');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Open;
end;

end.



服务器端编译有错误:
ServerSocket1.Socket.RemoteAddress:= '192.168.0.118 ';
cannot assign to a read-only property


各位大哥,那我怎么使 服务器和客户端建立连接
不客户端不进行任何操作

谢谢!

[解决办法]
能不能用socket传到客户端,服务器ip然后服务器再连接
[解决办法]
TServerSocket的Socket.RemoteAddress是只读的。

“客户端不知道服务器的 IP 地址”
这台服务器已经没有“资格”作服务器了。

把知道IP地址的设计成ServerSocket,不知道IP地址的设计成ClientSocket。
[解决办法]
方法很多,比如

你原来的设计是A当服务器的,不过其它机器不知道A的IP
你可以在A上多放一个ClientSocket,其它机器(B,C,D)上放多个ServerSocket并在监听着的
然后A在某种情况与依次与B,C,D通讯,告诉自己的IP地址后就断开

接着其它机器都知道了A的IP,就可以按你原来的作法了

读书人网 >.NET

热点推荐