急!急!急!socket 高手请进! ( 积分: 80 )

  • 主题发起人 主题发起人 wenken
  • 开始时间 开始时间
W

wenken

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟现在在写一个Internet上的C/S模式的程序。用的是DELPHI6下的TSERVERSOCKET 和TCLIENTSOCKET 两个控件。请问服务器端程序怎样分别和各客户端程序通信?服务器程序怎样发送数据到不同的客户端?(比如有10台客户机程序连接上服务器端程序,可是我只要分别发数据到其中的随意5台,怎样区别?是否可以用socket.RemoteAddress取得的远程客户端的IP来区分,但是小弟有一点不明白是的,如果客户端程序是在同一个局域网,是通过一个网关出去的话。这样他们在网上的IP是一样的。服务器端程序怎么区别他们?
服务器程序放在有固定IP地址(指的是在Internet上有固定IP)的服务器上。
客户端程序放在任何可以上网的电脑上(ADSL形式的宽带)。
请各位高手指导。最好能给出相关的源程序。小弟十分感激!!! 小弟的QQ为56089662
 
小弟现在在写一个Internet上的C/S模式的程序。用的是DELPHI6下的TSERVERSOCKET 和TCLIENTSOCKET 两个控件。请问服务器端程序怎样分别和各客户端程序通信?服务器程序怎样发送数据到不同的客户端?(比如有10台客户机程序连接上服务器端程序,可是我只要分别发数据到其中的随意5台,怎样区别?是否可以用socket.RemoteAddress取得的远程客户端的IP来区分,但是小弟有一点不明白是的,如果客户端程序是在同一个局域网,是通过一个网关出去的话。这样他们在网上的IP是一样的。服务器端程序怎么区别他们?
服务器程序放在有固定IP地址(指的是在Internet上有固定IP)的服务器上。
客户端程序放在任何可以上网的电脑上(ADSL形式的宽带)。
请各位高手指导。最好能给出相关的源程序。小弟十分感激!!! 小弟的QQ为56089662
 
呵呵,你在一个贴子上问这么多问题,答哪一个好呀
 
其实说简单了就是:放在有固定IP地址(指的是在Internet上有固定IP)的机器上的服务程序怎么和用宽带上网或其他方法上网的客户端程序进行通信。
 
》》服务器端程序怎么区别他们?
IP地址一样,但端口不一样,所以可以区分。

让客户端启动的时候连接服务器就行了。
 
所有连接服务器程序的客户端程序的端口是一样的呀。比如:服务器IP为:211.10.11.11 侦听端口为:8058
所有的客户端程序的连接参数也应该是(IP为:211.10.11.11 端口为:8058)
本人写了一个刷卡的机房管理软件,在局域网里是没有问题。但到了公网上就可能有。不过我没有测试。我用的是非阻塞模式。高手请进来!!!
 
服务器的端口8058是侦听端口,即接收连接的端口。 客户端连上该端口后,服务器端会另外创建一个唯一的端口来供这个客户端通信。
 
to alter 这么说每一台连接上的客户端要分一个端口???
请大家说明一下:如果我有10台通过同一网关上网的客户机程序连接上公网上的服务器端程序,可是我只要从服务器端程序发送数据到其中的随意5台,怎样区别?用Ssocket.RemoteAddress取得的一定是同一个IP。所以肯定不能用IP地址。可以用套接字吗?
 
问题本人已解决。我对这个论坛有点失望。什么中国最大的DELPHI论坛。晕!
 


晕,基本的通信理论和Socket 的使用都没有搞清楚,



 
我觉得在问问题之前,最好自己多读点书,问的才有方向。
 
每个客户端连接或断开与 服务器连接时, TServerSocket 会 Socket.Connections保存当前的客户端的连接数,你要回送数据就可以利用下例子:
ServerSocket.Socket.Connections[0].SendText(Memo1.Lines[Memo1.Lines.Count - 1])
如果要表示当前的 Socket.Connections 是那个客户端,那你可以利用 Record 来标示
记录客户的相关信息。
详细的看看 Delphi 的帮助

 
你的这个例子看来要用多线程。
每个线程负责一个客户端。
看来delphi的socket控件害了不少人,让他们连基本的socket通信都搞不清楚。
建议练练socket api。
 
后退
顶部