关于即时通讯软件的制作,跟贴者有分 ( 积分: 100 )

  • 主题发起人 主题发起人 jangill
  • 开始时间 开始时间
J

jangill

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在做一个即时通讯系统。
我用的是indy控件TidudpClient和TidudpServer做的系统。
请问:如果让局域网下的客户端收到从另外一个局域网的客户端发来并由服务器中转来的信息呢? 不胜感激。
 
我正在做一个即时通讯系统。
我用的是indy控件TidudpClient和TidudpServer做的系统。
请问:如果让局域网下的客户端收到从另外一个局域网的客户端发来并由服务器中转来的信息呢? 不胜感激。
 
p2p 看看这个贴子.
http://www.lihuasoft.net/article/show.php?id=2478
 
谢谢楼上,有没有用delphi代码做的,使用indy控件TidudpClient和TidudpServer做的
 
簡單地兩台機相聯,復雜的就是兩台內網機。直接相聯我也不會,只能通過有外網IP的機器進行中轉。就很簡單的了。你把你的發送人和信息告訴中轉機,另一台機去取他的信息。
 
另一台機去取他的信息。
也是一个办法, 但我但是的是速度会慢下来的。不如由服务器中转信息到另外一个客户端。
 
可以参考一下以前用socket实现代理服务器的文章,其实你说的中转服务器就是一台代理服务器,不过那个好像是用Tserversocket和Tclientsocket写的。摘录其中一段服务器转发外面网传来的数据代码:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
i,j: integer;
rec_bytes: integer; {传回的数据块长度}
rec_Buffer: array[0..2047] of char; {传回的数据块缓冲区}
begin
for i:=1 to sessions do
if (session[i-1].CSocket.tag=socket.SocketHandle) and session[i-1].Used then
begin
rec_bytes:=socket.ReceiveBuf(rec_buffer,2048); {接收数据}
for j:=1 to serversocket1.Socket.ActiveConnections do
if serversocket1.Socket.Connections[j-1].SocketHandle=session[i-1].SS_Handle then
begin
serversocket1.Socket.Connections[j-1].SendBuf(rec_buffer,rec_bytes); {发送数据}
break;
end;
break;
end;
end;

file://“页面找不到”等错误信息出现时…
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
inc(invalidrequests);
end;
当然在客户端连接服务器后你在服务器要create一个新的Tclinetsocket去连接远方的客户机。
 
只是为了跟贴得分,没有研究这方面得,说不上
 
NAT穿透 比较麻烦的问题
 
内网的我会做,外网的没做过。。。估计不会
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部