1.网络连接方式是采用ThreadBlocking还是NonBlocking根据什么来确定?
比如一个银行的存储系统,可能有多个客户端向服务器提交信息,是选择哪一种方式2.这个问题可能有点弱,不过我真的不知道。
多个客户端同时连上服务器,也可能同时发送一定格式的数据,而服务器要分别对相应的客户端返回信息,那么,服务器的socket怎么样识别刚才的数据是哪个客户端送来的,从而给出对应的响应的?3.在传输自定义type的数据时,比如说一个record,用什么方式传比较好
(每次传的东西不大,但是可能有很多客户端同时在传不一样的东西)
sendbuf ? 问题so多,决定给200分   :)

解决方案 »

  1.   

    1,我也不太清楚。
    2:
    如果采用UDP的传输的话,在它的包里面都包括有来源方的IP,端口号的,SOCKET应该也能得到。
    3,可以将记录写成流的形式,可以用sendstream。
      sendbuffer也可以.
      

  2.   

    1.采用THreadBlocking的话,表示每个客户的连接都将自动分配一个线程。
      采用NonBlocking的话,表示用非阻塞方法连接每个客户,所有的连接都在单独的线程中处理,并且用异步事件onClientRead或onClientWrite来通知服务器端socket进行读或写。
    建议使用THreadBlocking.
    2.使用ServerSocket组件,该组见的Socket.socketHandle区别每个客户的连接。3.随便.我使用的是SendBuf.
    问题不多,还好都做过!
      

  3.   

    1。网络连接可以用SERVERSOCKET和CLIENTSOCKET来完成,一个在服务端,另一个可以在多个客户端上。至于BLOCKING和NOTBLOCKING的区别是:非阻塞的SOCKET通信是指SOCKET连接上的数据传输即读写操作是异步发生的,不会阻塞其他网络程序中的其他代码的执行,这种方式传输速度慢,较耗网络资源,但编程简单。阻塞方式SOKCET通信则相反;2. 多个客户端连接上服务端可以用SERVERSOCKET.SOCKET.ACTIVECONNECTIONS来判断当前有多少活动的连接,然后在根据SOCKET.CONNECTIONS[i]来获得不同客户端的信息(0<i<activeconnections-1),3. 一般是用SENDBUF发送文件,当然也可以用SENDSTREAM,和SENDTEXT(只能送STRING);大的文件一般要分开几份来传因为TCP/IP的数据包好象有限制大小。
      

  4.   

    cloud_leonhart(阿萌):
    用socket.connections[i]来区别Client会不会麻烦点?假设Client掉线后再上来?
      

  5.   

    我的客户端做一次数据传输大约只有几十个字节,信息量不大(就是存款取款之类的信息,没多少),
    同时连接的客户端可能会比较多,这种情况的话用NonBlocking还是thread ?第二个问题我还是不明白  socketHandle怎么用?
    ^_^多谢大侠们,帮帮小弟,我弄懂以后给300分,嘿嘿
      

  6.   

    ffgg(探索中...) :
     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;