说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi4的Winsocket编程

HTML文档下载 WORD文档下载 PDF文档下载
Delphi4的Winsocket编程

也许你曾经叹服过微软公司的IE浏览器等网络应用软件功能之强大

技术之先进,也许你目前还没有能力开发这样的一个复杂的大型系统,不过不用着急

这里可以给你一个练习的机会,就是学会用Delphi的Winsocket来编写基于TCP/IP的应用程序,这里假设你已经对Delphi开发工具已经初步熟悉了。

我们可以想象,如果从最原始开始来编写一段实现与远程计算机通信的程序,则必须对相关的网络协议、系统的底层知识以及网络软硬件技术有一个全面的熟悉和掌握,然而这在短时间内对大多数人来讲,都不是一件容易的事。

幸运的是Delphi的网络组件库中为我们提供了关于实现网络通信的组件,它们封装了复杂的具体实现的细节。其中ClientSocket和ServerSocket组件使我们能够很方便地编写出自己的网络通信和资源共享程序。

Delphi 4.0中编写Winsocket程序的步骤分为:

1)Winsocket组件属性设置;

2)建立与远程计算机的连接;

3)计算机间的数据传输;

下面具体就这三个步骤做详细说明。

一.Winsocket属性的设置

Delphi 4.0中将Winsocket细分为两种组件:ClientSocket和ServerSocket。它们分别作为客户端和服务器端的组件。即在客户端程序中采用ClientSocket组件,而在服务器端则采用ServerSocket组件。通过这两种组件之间的通信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然在客户端程序中再引入ServerSocket的话,那么客户端程序就可以充当服务器了,可以对其他的客户端程序的请求进行响应。

如果正在编写服务器端程序,就必须设置ServerSocket组件的Port属性。之所以要设置此参数,是因为在同一台计算机上可能运行着多个服务器程序,而它们可能总在不停地接受来自于远程客户端程序的连接请求。如果你正试图发送一份电子邮件,而系统却将你的请求连接到了另外一个服务器程序上了,则你的邮件就肯定无法正常发送出去了。所以必须给服务器程序上的ServerSocket组件设置一个合适的端口号Port。也可以设置Service属性,它指示了ServerSocket所提供的服务类型,比如:FTP、HTTP等等。然后设置Active属性为True。

如果正在编写客户端程序,则设置ClientServer组件的属性就多一些。Port属性应设置成和服务器端的Port属性值一致。另外Host的属性必须正确设置,它是一个只读属性,在设计时不可用。它指示了客户程序所要连接的远程服务器的主机名。也可以设置Address属性,也就是远程主机的IP地址。如果这两个属性都设置了的话,那么系统将采用Host属性,而Address属性设置的IP地址就变成无效了。

二.建立与远程计算机的连接

要在远程计算机系统之间进行数据传输,首先必须在通信的两台主机之间建立连接。

服务器端的ServerSocket组件调用Open方法初始化Socket连接,同时也就设置了Active属性为True,将ServerSocket组件设置成侦听模式,随时侦测是否有连接请求。

如果服务器接受了客户程序的连接请求,则触发OnAccept事件,如下代码就是处理接受连接后服务器程序所要做的工作。

procedure Myform..ServerSocketAccept(Sender: TObject,Socket: TCustomWinSocket);

begin

IsServer := True;

end;

在客户端程序中,ClientSocket组件则设置Port、Host等必须的属性,然后设置Active属性为True,提出连接请求。

三.计算机之间的数据传输

一旦服务器端接受了客户机方面的连接请求,客户机就可以发送数据。这时,在客户机和服务器之间就拥有了一个Socket,通过此Socket双方实现通信。所以Socket属性很重要,它又拥有很多的方法,用其中的几个简单的方法,就可以实现数据的发送和接收。

客户机端用如下形式:ClientSocket1.socket.sendtext('string you want to send');

在服务器端采用如下形式:ServerSocket1.socket.recievetext( str: string);此函数返回接受到的字符串的长度,将字符串存储在变量str中。

上述是数据传输的最简单的例子,你还可以采用Socket属性所提供的其他方法来实现复杂的数据传输。

虽然Delphi 4.0中使用Winsocket组件十分方便,但是要真正熟练运用它来实现网络应用程序的开发,则必须仔细阅读关于它的帮助文件和示例程序。在不断的学习中比较这种方法的优点,掌握其编程特点,进而掌握Delphi中所提供的其它网络组件,例如:NMPOP3、NMUDP、NMFTP等的编程技巧。到那时,你就会有能力参与真正意义上的网络应用程序的开发,而不是停留在拿来别人的网络应用软件,设置一番、会熟练操作的水平上。

Facebook北极圈数据中心,Open Compute Project的力作! 最后三天!4折抢购2013移动开发者大会门票 电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? 编写代码?先熟悉一下编程语言界限吧! Spanner vs. F1:谷歌两大数据管理利器的整体对比及关联 移动设计需摒弃的几大PC应用设计方法 响应式导航设计案例解析(多图) 所见即所得:七大无需编程的DIY开发工具 前Google员工发布无痕搜索产品,阻老东家财路 VMware推出vCloud Suite及vSphere新版:可用性及性能双丰收 TIOBE 2013年10月编程语言排行榜:Groovy首次挤进Top 20 Cookie时代将结束:微软将开发跨PC、移动和Xbox跟踪技术 Web设计里需要避免的八大糟糕趋势 Groupon从ROR迁移至Node.js,响应速度大幅提升 腾讯云的Container实现 专为物联网打造的数据库TempoDB获得320万美元投资 MongoDB成为首位10亿美元初创,功臣可归功于Oracle? 程序员遇到Bug后的30种常见反应 扎克伯格豪掷3000万美元购四套房 梅耶尔和拉里佩奇也居于此 IBM研究人员:仅200条微博 就可构建人格剖析图 MDCC重磅讲师:Pebble CEO Eric Migicovsky 历届中国大数据技术大会PPT精粹(一) 通讯也“跨界”:几行代码,API+SDK,用PaaS实现移动互联 MIT风景线:丝绸雕塑、VR代码、机器人、智能按钮及保时捷 深度学习新算法,完成字里行间的情绪识别 如何在开发项目里和难缠的程序员合作? 移动周报:七大无需编程的DIY开发工具 手把手教学,用jQuery Mobile创建Web App 压缩中提到的文件头有什么作用 , 请问各位专家,在网页上如何制作视频点播?有几种方式! 我报了中程谁有历年的中程试卷? 我收到的信都是?号,怎么看???? VB中是否有移位操作符??是否有_能够得到数据类型宽度的函数? 哪里有core java的e版down啊? 有事好商量!请进! DLL编程错误,请高手指教一下!! 活见鬼,真气人....... 问一个trigger问题? 问一下:我的char*都用_T("asdfsafd")表示了,资源也没任何问题,可有时候运行程序显示乱码 在论坛里,发一个帖子新开一个窗口,当发完后让原来那个窗口刷新一下 我的机子到底怎么回事???? 我试试.. CListCtrl中如何选定整个一行? 来到济南天气太热,特来送分 ★★★★★ 见于现在伪ID和盗用密码的现象十分嚣张,我提议…… ★★★★★ 请教各位,我用vb6.0访问ms sql7.0数据库,为什么有时出现,“过期,数据已超时?” 请问COM和DLL有什么区别和联系?(30分) 关于侯老师 win95-a-developers-guide 一书的源配书... ISAPI中不能存取ASP中的Session、Application变量?高手你老人家在哪里? 大家来看看这些招聘题目合不合适 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一 activeskin里的skinbuilder有谁用过???来讨论吧 我在msdn上看到vb中的字符串有两种:定长字符串和变长字符串。请问如何分别声明这两种类型? 怎样在ADO中引用已打开的recordset的某一字段值,请给几个例,谢谢了! seedundersnow and holyfire help me!about 8253! 谁有cute ftp 4.2.6 beta的注册码 请问如何把页面查询到的记录导入到Excel中呢? 有用过TAdvStringGrid的吗?OnGetEditorType( )为何不被调用? 请教高手如何用Xsl编制函数控制Xml??急急 哪位给一个MD5的例子!谢谢了 长春的李延生来领分 求救:一个VC中多线程的问题 提个问题,原来对VC尤其是界面和C++语法这一块比较熟,现在由于公司需要转C++BUILDER,难不难,需要熟悉哪些 [总300分,会继续加分]哪位大哥用编程实现过创建SQL Server的DTS package并且run the package的全过程[急] 能不能使用html 压缩中提到的文件头有什么作用 , 保含哪些信息 菜鸟问题1 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一。。。。。。。 关于:import java.util.StringTokenizer; 问题! 如何实现在某特定时间(如每月1号,或7天后)执行特定asp程序? 在开发工具中如:(vc,jsp)中如何得到oracle中自定义函数的返回值 当form被移动的时候会相应什么事件的? 关于使用mscomm32.ocx中的一些问题 类似股票信息显示系统的问题(图形显示) 强烈抗议:无怨无仇,为什么冒用我的ID 写一些乱七八糟的东西????? 一个简单的线程问题! 请问高手:两个类之间的关联关系如何实现? 各位请问, 我的系统要求支持三种语言, BIG5,GB2312,ENGLISH,数据库应该怎样设计!! 求救!!!vfp ,控件 optiongroup1, 属性 ButtonCount=N,如何给第N个OPtionN.Caption赋值 {5/6-(2/5+1/3)}x5/7分数啊.急 设x1,x2是关于x的一元二次方程x的平方-2mx+m-1=0的两个实根,则(x1+5x2)(x2+5x1)的最小值为? 解方程:5x2+7x+12=0五x的平方+七x+12=0 编写一个程序,计算x-1/2*x3/4+1/2*3/4*x5/6-1/2*3/4*5/6*x7/8+.的近似值直到最后一项的绝对值小于eps 用c语言编~ 设X1,X2为方程x²(平方)+X-3=0的两个根,求X1³(立方)-X2²(平方)+30的值 x减0.7x等于3.6 (X一5/6)X5/6=25. 设函数f(x)=x3-6x+5,xεR1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 x-0,7x等于什么 解方程,(x+5.5)X5=120怎么算用T等式 求函数f(x)=x3-5x2+8x-4在【0,3】上的值域 X-0.7x等于多少 计算(一5)一(一5)x5分之一x(一4) 设函数f(x)=x3-6x+5,xεR 1;求函数fx的单调区间 2,求函数fx在区间[设函数f(x)=x^3-6x+5,xεR 1;求函数fx的单调区间2,求函数fx在区间[-2,2]上的最值 5x2=1打 成语5x2=1打一成语 已知sinθ,cosθ是关于x的方程x^2-ax+a=o的两个根 θ求1.sin^3(θ)+cos^3(θ)的值2.tanθ+1/tanθ的值 f(x)=2^2x-5x2^x-1+1,它的最小值是?RT.实在算不出来了,只能求助各位大大了0.0f(x)=(2^2x)-(5x2^x-1)+1 1分之1等于1是什么成语 已知关于x的方程2x^2-〔(根号3)+1〕x+m=0的两根为 sin θ,cos θ ,θ∈(0,2π)1.sinθ/(1-cotθ)+cosθ/(1-tanθ)的值2.m的值3.方程的两根及此时θ的值 用秦九韶算多项式f(x)=6x2+3x2-5x2+4当X=4的值时需要把多项式改写成什么 5x2 =1打一成语 已知 θ∈【0,2π】sinθ,cosθ是关于X的方程X方-KX+K+1=0的根,求角θ 已知函数f(x)=0.5x2-x+1.5的定义域和值域都是[1,-b],求b的值. 1*1等于1,根据提示写成语还有12345679 已知关于x的方程2x^2-(√3+1)x+m=0的两个实数根为sinθ和cosθ,θ属于(0,2π)求方程的根及θ的值 已知f(x)是二次函数,且f(x)+f(2x)=5x2+3x+2,求f(x) 0+0等于一什么成语 打一成语 一 7/8 1、2、5 二四六八十 0000 40÷6 1% 7÷2 1000²=100×100×100 设x1、x2 是一元二次方程x2+4x-3=0的两个根,2x1(x22+5x2-3)+a =2,  则a = .设x1、x2是一元一次方程X平方+4x-3=0的两根,2x1(x2的平方+5x2-3)+a=2,则a=我知道怎么算了 a=8 心情好啊 f(x)=5(x≤1) f(x)=1/x-1(x﹥1) f(5)= f(1/2)=f(x)=5(x≤1)f(x)=1/x-1(x﹥1)f(5)=f(1/2)= 打一成语 (1)一 (6)0000 (7)40÷6 (8)1% (9)7÷2 (10)1000²=100×100×100二四六八十÷7 设X1、X2是一元二次方程 X - 4X - 3 = 0 的两个根,2X1(X2+5X2-3)+a=2,则a=___ f(x)=x(1-x)(x大于等于0) f(x)=x(1+x)(x小于0)判断f(x)奇偶性 (1²+3²+5²+……+99²)-(2²+4²+6²+……+100²) 设x1,x2是一元二次方程x²+4x-3=0的两个根,2x1(x2²+5x2-3)+a=2,则a= 已知f(x)=x(1/2x-1+1/2)⑴判断f(x)的奇偶性 ⑵求证:f(x)大于0 1-2²+3²-4²+5²-6²+……+99²-100² 关于x的实系数一元二次方程x²+ax+2b=0的两个实数根分别位于区间(0,1)(1,2)则b-2/a-1的取值范围是 已知函数f(x)=1/2^x-1+1/2 求f(x)的定义域 判断函数f(x)的奇偶性 证明当X大于0时f(x)大于0 1²-2²+3²-4²+5²-6²+····+99²-100²=急求,好的加分 关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2关于x的一元二次方程5x²-ax-1=0有两个不同的实根 一个位于区间(-1,1)另一个(1,2) 则实数a的取值范围 求 函数f(x)=x(x大于-1小于等于1)的奇偶性是A :奇函数非偶函数B:偶函数非奇函数C:奇函数且偶函数D:非奇函数偶函数 7.5X2.7+1.9X2.5 使用乘法分配率 设实系数一元二次方程x^2+ax+2b-2=0有两个相异实根,其中一根在区间(0,1)内,另一根在区间(1,2)内,则(b-4)/(a-1)的取值范围是我知道这题可用线性规划做.想问下,为什么不能用韦达定理,也就是 已知函数f(x)对任意实数X,y恒有f(x+y)=f(x)+f(y)且当x大于0f(x)小于0 判断f(x)奇偶性并证明判断f(x)的单调性,并证明之 怎么简算.0.5x2.5x12.5x64 实系数一元二次方程x²+ax+2b=0有两个根,一个根在区间(0,1),另一个根在区间(1,2)内,求:(1),点(a,b对应的区域的面积?(2).b-2/a-1的取值范围.(3).(a-1²)+(b-2)²的值域 请计算 +8!+9!+...+2006!的第十位+8!+9!+...+2006!的和的第十位,谢谢楼下的回答!请问是怎样得出n=45时最后的10位数据已经是全0了呢? 1.25X0.32X2.5 简算 把一元二次方程-5x2+x-3=0的二次项系数变为正数,且使方程的根不变,则变形后的方程为().这是选项:A.5x2-x-3=0 B.5x2-x+3=0 C.5x2+x-3=0 D.5x2+x+3=0 (-30)除以(3/1-5/1-15/1)等于多少 1.25x0.32x250 简算 已知sina是方程5x2+7x-6=0的根求[sin(3π/2-a)tan(2π-a)]/[cos(π/2-a)cos(π/2+a)]的值 48*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*1548*(7/12+5/600)除以2/3 1/8+(1/8+1/30)*15 (4.8x7.5x8.1)除以(2.5x2.7x2.4) 已知方程5x2+kx-6=0的一个根式2,求它的另一个根及K的值 -30除以(3分之1—5分之1—15分之一) 2/5x2/10+9/10x0.4-2除以5x1/10,x:是乘,尽快,我明天要演讲了 设X1,X2是方程X的平方+X-3=0的两个根,则X1的立方-4X2的平方+19的值是 若sina是5x2-7x-6=0的根,则
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn