当然你要有服务器端。,服务器端放在INTERNET上,客户放入局域网。这样才可以,
还有TCP穿透强
还有TCP穿透强
解决方案 »
- 怎么判断ClassA实现了InterfaceA呢?
- 关于在dll中调用excel出现的问题
- 求助:BSTR类型的字符串(WideString)中如何查找子串?或者给出一个长字符串(超过255字符)的解决方案?谢谢!!!
- GLScene帮助,中英文对照
- 关于用程序控制键盘的问题?请指教
- 各位高手帮帮我呀要不然我就死惨了//////关于一个存储过程调用的问题
- 文本编辑器如何实现自动完成的功能?
- 请问怎样通过修改注册表或其他方法来设置自己开发的应用程序的关联文件?
- 求各位大牛指点指点学习Delphi xe3的学习方法,不胜感激
- 像这种控件效果,是怎样实现的?
- 李维的DELPHI5.x电子商务篇P81例子中(request.contentfields.indexofname('cbmd53')<>-1)时什么意思???
- easy问题,如何在Statusbar上加控件。
实际上应该这样说的,就是Server一定要直接连接到Internet上,即是Server一定要有固定的有效IP Address,而无论客户端身置何处,只要能够通过有效的途径可以和Internet连接上,那么
这个局域网便可以被访问,其他的Client通过Server提供的相关服务亦能与之通讯(当然如果该局域网添加了诸如防火墙之类的安全设备,可能要另当别论了)。因为每当客户端与服务器建立连接(Socket连接)时,就确定了与服务器通讯的IP Address以及Port,只要确认服务器要访问的客户端的IP和Port那么就能够访问该Client机了,具体做法是:
每当Client和Server建立连接时,在Server里将ClientSocket的RemoteAddress和RemotePort保存到一个可维护的登录用户列表中或者刷新其中的相关信息。(这是很重要的)
接着就如下处理了:
Var UserID: String;//是指定要访问的登录者
iK: integer;
CurrentUser: PUser;//PUser就是存放客户信息的指针
UserList: TList;//用于保存客户信息的列表,应该是全局变量,而且事先已经Create
for iK:=0 to UserList.Count-1 do
begin
CurrentUser:= UserList.Items[iK];
if CurrentUser.UserID=UserID then Break;
end;
for iK:=0 to ServerSocket.Socket.ActiveConnections-1 do
begin
if (ServerSocket.Socket.Connections[iK].RemoteAddress=CurrentUser.IPAdress) and
(ServerSocket.Socket.Connections[iK].RemotePort=CurrentUser.Port) then
begin
ServerSocket.Socket.Connections[iK].SendText('要发送的内容');
//或者是ServerSocket.Socket.Connections[iK].SendBuf(Buf,Count);
Break;
end;
end;