ServerSocket服务器如何向两个用 ClientSocket做的客户端连接?即服务器如何中转?(100分)

  • 主题发起人 主题发起人 breezeboy
  • 开始时间 开始时间
B

breezeboy

Unregistered / Unconfirmed
GUEST, unregistred user!
ServerSocket服务器如何向两个用 ClientSocket做的客户端连接?即服务器如何中转?
服务器为S,客户端为C,A机为服务器,运行S。B,C 为客户端,B机运行C1,C机运行C2。
C1想通过服务器转发消息到C2,则它发到S,请问,S如何把它发到C2上?因为Socket.sendtext或Socket.sendbuf 中都没有IP等东西,如果用ServerSocket1.Socket.connection[1].sendtext('aaaa')是可以,但如果有很多C,如c1,c2...C99,c1要发到c90上,但如果此时c80掉线了,那c90就成了c89了,这样不好控制。
 
用ServerSocket?直接用Socket API写服务程序好一点吧?
 
我没有太多的时间了,如果不用Socket API,有其它方法吗?如我能先定位到它的某个对应的Socket,再 Socket.sendtext('ok!')。
我考虑过Handle等其它方法,不过好象都不太好。
 
这个问题!值得关注!
 
但如果此时c80掉线了,那c90就成了c89了...
=========================================
你不会使用这样的序号来判别客户端吧,如果这样的话,你也太...呵呵
每个socket都有一个ID号,我们叫做Handle,以下的步骤不用我多说了吧,明白了么?
 
记住ClientSocket的HANDLE

用它来找指定的ClientSocket
 
我考虑过Handle等其它方法,但下面我就不知道该如何处理了,因为Handle是只读属性,我不可以给它赋值,假如有9个ID,111,222,333,444,555,666,777,888,999,现在我要用555 Socket 给客户端发消息,该如何处理后,我才能 Socket.sendtext('ok!')。总不能每次发消息,我都循环一次 if ServerSocket1.Socket.connection.Handle=555 then ... 吧,请masm,wlmmlw 两位大侠讲得再清楚一点,可能对你们而言,太简单了,但我真的下不去了,
另外,Socket 的Handle是取ServerSocket1.Socket.connection.Handle 还是ServerSocket1.Socket.Handle。
其实我已经开始准备用Socket API了,但问题我还没有搞清楚,请大侠们给予指导,谢谢!分不够,我可以再加!
 
你要给Handle为555的那个socket发送信息:
var
Socket:TCustomWinSocket;
begin
Socket:=TCustomWinSocket.Create(555);
Socket.Sendtext('ok!');
end;
注意:不需要Socket.Free;!!
因为这个只是指向到Handle为555的那个Socket(本来这个Socket就已经存在了,并没有新建)。
 
测试成功,谢谢masm大侠,好象几年前你也回答过我的问题,一并谢过!!明天结贴[:)]
另外,好多人都说,用此控件,只能做一些小东西玩玩,是真的吗?实用的东西,一定要Socket API自已写吗?,难道Borland就这么不顶用,以前没用过此控件,故此发问??
 
呵呵,其实很多时候自己多想一会,答案也会接近了的。

举例吧;

以前曾管理对讲系统,手持机都是一样的发 或 收(无线电频率),山顶上的就是服务器了,喊人当然是要叫名字咯,“喂喂,大队长、大队长,”,所以你个别同志不上班也不要紧,反正不叫你,呵呵,原理就是这样啦。
 
外,好多人都说,用此控件,只能做一些小东西玩玩...
================================================
呵呵,以前我也是这样的,DOS下全部用汇编写程序,小一点的程序还好,大了复杂的话,光界面就花了我很大的功夫,还有一些硬件中断等等的处理,很多时候考虑不是那么周全,常常引起莫名其妙的系统崩溃。Socket API写程序也一样,除非你非常熟悉,否则极有可能为了一个不起眼的错误而让你发疯!还是先从控件着手写程序,如果有必要进一步深入,则先可以看看该控件的源码。
 
谢谢masm,表示同意,我这样想的,如果你没有特殊的需求的话,你凭什么说你写出的一定比Borland的好,当然,我不否认可能Borland的控件会有一些Bug。
 
嘿嘿,用Socket API写程序。。。很简单的了,你们以为一定很复杂么?
 
To:?masm
>>呵呵,以前我也是这样的,DOS下全部用汇编写程序,小一点的程序还好,大了复杂的话,光界面就花了我很大的功夫
嘿嘿,谁让你那么笨用汇编写界面啊?我也没有让楼主用API写界面吧?
 
To:?masm
>>Socket API写程序也一样,除非你非常熟悉,否则极有可能为了一个不起眼的错误而让你发疯!还是先从控件着手写程序,如果有必要进一步深入,则先可以看看该控件的源码。

你看他们的源码还不如自己写socket。就拿indy来说,不看到你头晕才怪。静下心来看API,会发现很简单的。
 
indy我看得很疯
都要晕死了
 
记录ServerSocket1.Socket.Connections[]的IP之类的,然后每个检测,一样再发送。不过麻烦点,效率也不好。
 
后退
顶部