1.网络连接方式是采用ThreadBlocking还是NonBlocking根据什么来确定?
比如一个银行的存储系统,可能有多个客户端向服务器提交信息,是选择哪一种方式2.这个问题可能有点弱,不过我真的不知道。
多个客户端同时连上服务器,也可能同时发送一定格式的数据,而服务器要分别对相应的客户端返回信息,那么,服务器的socket怎么样识别刚才的数据是哪个客户端送来的,从而给出对应的响应的?3.在传输自定义type的数据时,比如说一个record,用什么方式传比较好
(每次传的东西不大,但是可能有很多客户端同时在传不一样的东西)
sendbuf ? 问题so多,决定给200分 :)
比如一个银行的存储系统,可能有多个客户端向服务器提交信息,是选择哪一种方式2.这个问题可能有点弱,不过我真的不知道。
多个客户端同时连上服务器,也可能同时发送一定格式的数据,而服务器要分别对相应的客户端返回信息,那么,服务器的socket怎么样识别刚才的数据是哪个客户端送来的,从而给出对应的响应的?3.在传输自定义type的数据时,比如说一个record,用什么方式传比较好
(每次传的东西不大,但是可能有很多客户端同时在传不一样的东西)
sendbuf ? 问题so多,决定给200分 :)
2:
如果采用UDP的传输的话,在它的包里面都包括有来源方的IP,端口号的,SOCKET应该也能得到。
3,可以将记录写成流的形式,可以用sendstream。
sendbuffer也可以.
采用NonBlocking的话,表示用非阻塞方法连接每个客户,所有的连接都在单独的线程中处理,并且用异步事件onClientRead或onClientWrite来通知服务器端socket进行读或写。
建议使用THreadBlocking.
2.使用ServerSocket组件,该组见的Socket.socketHandle区别每个客户的连接。3.随便.我使用的是SendBuf.
问题不多,还好都做过!
用socket.connections[i]来区别Client会不会麻烦点?假设Client掉线后再上来?
同时连接的客户端可能会比较多,这种情况的话用NonBlocking还是thread ?第二个问题我还是不明白 socketHandle怎么用?
^_^多谢大侠们,帮帮小弟,我弄懂以后给300分,嘿嘿
300?!眼睛亮了!
那还是使用阻塞方式,因为你需要考虑传送过程中突然出现的某些事故,如掉电!
其实也可以使用非阻塞,你可以在数据传送完后服务器再送来一个消息,告诉你说数据已经确认得到!
这你自己看着办!
Delphi6的ServerSocket组件的SocketHandle属性:
该组件在Internet页,在该组件的onClientConnect事件中:
procedure TForm1.ServerSocket1ClientCOnnect(Sender:TObject;Socket:TCustomWinSocket);
begin
ClientID:=Socket.SocketHandle;//每个连接的客户都不一样,区别出各客户
ClientIP:=Socket.RemoteAddress;//客户IP,连上来的那个人的IP地址
ClientHost:=Socket.RemoteHost;//客户主机名
.....end;