ClientSocket和ServerSocket的使用问题 我在程序中使用了这两个控件一般运行时没什么问题,但当信息的收发同时发生时,程序就只能收信息,再也不能发送信息了,请问这是怎么回事? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对于ClientSocket组件,从字面上就可以看出,它用于请求方。也就是说,它的动作是主动地建立连接。显然,ServerSocket组件用于响应方,它的动作是侦听以及被动接受连接。 组件ClientSocket的属性是相对静态的,它和ServerSocket之间只是连接和断开的关系。并且仅当ServerSocket对其接受才表示建立连接。 组件ServerSocket的属性是动态的。伴随着一个新的ClientSocket与之建立连接的同时,就会产生一个新的Socket与该ClientSocket对应,保持单独的连接,进行单独的通信。因此,在同一个 ServerSocket中,可以与多个ClientSocket保持同时连接和各自独立的通信。ServerSocket的属性 Socket.ActiveConnections用于表示客户端连接的数量;属性Socket.Connections[Index] 则用于访问单个与ClientSocket连接的Socket。 正是这样的结构,才使得WinSocket 技术能够稳定实现一个服务程序向多个客户端提供服务。 在独立的ClientSocket中,属性Socket.Data 是一个指针,缺省值是nil ;在ServerSocket的每个独立的Socket.Connections[Index]中, 属性Data也是一个指针,缺省值是nil 。因此,可以通过该指针建立并保存各自独立的相关信息,用于实现各自独立的通信。而在ClientSocket的事件 OnRead中,调用方法传递的Socket值就是响应该事件的对象属性ClientSocket.Socket 。同样,在 ServerSocket的事件OnClientRead中,调用方法传递的参数Socket就是对应于当前发送数据客户端的唯一的Socket连接,即ServerSocket.Socket.Connections[Index]。这样,就能够对不同的连接分得清清楚楚明明白白。首先介绍实例程序的设计思想。上传文件的过程是这样的(这里的C和S分别代表客户端和服务器端): C:请求上传文件; S:准备就绪,可以接收; C:需要上传的文件信息; S:收到文件信息: C:第一个包; S:收到第一个包;创建文件,开始写数据; C:中间的包; S:收到中间的包;继续写数据; C:发送最后一个包,关闭文件; S:收到最后一个包;写数据,关闭文件。 下载文件的过程是这样的: C:请求下载文件; S:准备就绪,可以下载; C:需要下载的文件信息(文件名); S:反馈文件信息(文件大小); C:准备就绪,可以接收数据; S:第一个包; C:收到第一个包;创建文件,开始写数据; S:中间的包; C:收到中间的包;继续写数据; S:发送最后一个包,关闭文件; C:收到最后一个包;写数据,关闭文件;下载成功; S:下载成功。 原理楼上够详细,不过还可以参考一下delephi自带的例题 请大家帮助我修改一个程序 送一贴大礼,顺便给出一个长久以来积攒的问题的解决方案!^-^ 问一下 DELPHI里面要显示GIF文件用什么组件? 文件(流)操作的高手们请看一下! 100 分,帮帮忙。 关于组件介绍的书有么,在哪下载呀 为什么没人回答我! Delphi中预想不到的代码II 打包的问题 程序自动退出,很奇怪的问题 关于数据集的更新模式 请教:关于Object Pascal中类和对象的若干问题?
首先介绍实例程序的设计思想。上传文件的过程是这样的(这里的C和S分别代表客户端和服务器端): C:请求上传文件;
S:准备就绪,可以接收;
C:需要上传的文件信息;
S:收到文件信息:
C:第一个包;
S:收到第一个包;创建文件,开始写数据;
C:中间的包;
S:收到中间的包;继续写数据;
C:发送最后一个包,关闭文件;
S:收到最后一个包;写数据,关闭文件。
下载文件的过程是这样的: C:请求下载文件;
S:准备就绪,可以下载;
C:需要下载的文件信息(文件名);
S:反馈文件信息(文件大小);
C:准备就绪,可以接收数据;
S:第一个包;
C:收到第一个包;创建文件,开始写数据;
S:中间的包;
C:收到中间的包;继续写数据;
S:发送最后一个包,关闭文件;
C:收到最后一个包;写数据,关闭文件;下载成功;
S:下载成功。