Socket的問題 (100分)

  • 主题发起人 主题发起人 xjc_first
  • 开始时间 开始时间
X

xjc_first

Unregistered / Unconfirmed
GUEST, unregistred user!
三層結構,采用Socket連接,客戶端指定了內部IP地址,平時都正常.
但當只要有一臺客戶端上了Internet后,所有客戶端都無法啟動.
斷線后,一切又恢複正常.
2.如局域网中有幾部電腦通過DDN指定IP上网,而電信局給的IP個數有限,所以沒有指定
IP的電腦(或指定內部IP的)就無法啟動.
 
是不是应为上了网后用的是动态的IP啊
 
在服务器上写一个广播程序,将服务器的IP广播出来就是了客户监听这个IP就可以了
 
好像客户机上网,访问的IP地址变了的.
成了上网的坜态IP.
 
IP不要设为静态的,设成动态的比较好,可以在某一个范围内检索(原理和木马类似)
 
To tianrei:
能詳細一點嗎?謝謝
 
AppServer的IP一般都會設成靜態的﹐如查設要設成動態的還不如把其分散到客戶端(即用
用本地的AppServer,把其IP設成127.0.0.1)
 
我做了一个三层结构的考试系统,服务器端的IP用广播形式发到客户端。客户端收到广播后
把Socket控件的Address设置为收到广播的IP就行了。
 
其他客户端是不是通过这台客户端作网关上网?
 
可能与服务器的ip有关[:)]
 
可能是appserver通过那台机上网?以那机为网关?
 
To Pipi.:
不是的,appserver沒上网,而只有一臺客戶端上网,當這臺客戶機上网時,其他客戶機都不
能啟動.
 
你的服务器可可以象整个局域网发广播.客户端收听.
如果在同一网段可以看看下面的代码!
服务器:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
NMUDP1.SendBuffer(xkeyword,6);
end;
服务器还可以将自己的IP广播出去
要代码我可以给你
客户端可以如下
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
begin

flagip:=FromIp;
NMUDP1.ReadBuffer(xkeyword,numberbytes);//监听

end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
SocketConnection1.Address:=flagip;
if(xkeyword='starip')then
begin
SocketConnection1.Connected:=true;
flagstar:=1;
Timer2.Enabled:=false;
timer3.Enabled:=true;
//判断是否连接'连接成功'
end;
end;
基本思想是,服务器广播自己的ip,客户断在启动的几秒钟监听.如果客户端听到了服务器的
广播的ip,则将客户端的 SocketConnection.connected设置为true;,如果在这个时间内没有
听到,则提示出错对话框.很显然服务器没有启动,客户端是听不到的!而等待时间你是可以设置的.
上面我的代码就是反映了着个思想!
 
后退
顶部