中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>网络通讯>文章内容

delphi 学习WinSocket的编程

来源:网络 关于:轶名 发布时间:2007-06-29   [收藏] [推荐]
一、什么是WinSocket
socket英文意思是插座,在计算机术语中,称为是套接字。它是一个把一些网络通信协议封装以便使用的组件。它最主要就是用来封装TCP/IP协议。在WinSocket的基础上,我们可以开发出许多的网络应用程序。比如说QQ,ICO等网络寻呼机,琅玛UC(一种P2P的软件)。
 
二、客户机/服务器模式
在TCP/IP网络中两个进程间的相互作用的主要模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。
客户机/服务器模式在操作过程中采取的是服务器提供服务,客户机请求服务,服务器响应的方式:
首先服务器方要先启动,并根据请示提供相应服务:(过程如下)
  1、打开一通信通道(端口)并告知同一网络上的主机,它愿意在某一个公认地址上接收客户请求。
  2、等待客户请求到达该端口。
  3、接收到服务请求,处理该请求并发送应答信号。
  4、收到数据,处理数据
  5、关闭服务器。
 
客户方:
  1、打开一通信通道,并连接到服务器所在主机的特定端口。
  2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……
  3、请求结束后关闭通信通道并终止。
 
三、开发步骤
P2P软件模拟
P2P(Perl To Perl)的意思是点对点,这种软件与传统的C/S结构的软件有一个很大的区别,就是通信的双方地位是对等的,双方都既是服务器又是客户机。它使用的协议还是TCP/IP协议,也有客户机服务器,只是双方都既有服务器模块来响应对方的请求,又有客户机模块来给对方发送请求。
 
现在P2P软件非常流行。尤其是资源共享类型的下载软件,你可以下载任何一台主机的文件,同时你也当作主机给任何一台联网的机子提供下载。
其实,我们自己就可以做一个P2P的软件。
1、  新建工程,在部件中勾选Microsoft WinSocket Control 6.0控件。
2、  在主窗体的添加两个WinSocket控件。分别命名为tcpClient和tcpServer,分别用来作为客户机的服务器模块。
3、  布局界面,用来实现点对点的聊天
4、  服务器模块关键代码:
============================================
Private Sub Command3_Click()
‘激活服务器,进入监听状态
tcpServer.Protocol = sckTCPProtocol
tcpServer.LocalPort = CInt(myserverPort.Text) '将 LocalPort 属性设置为一个整数。
tcpServer.Listen '然后调用 Listen 方法。
If tcpServer.State = sckListening Then
Command3.Enabled = False
Else
MsgBox "服务器启动失败,请检查端口是否空闲!"
End If
End Sub
=============================================
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
‘收到连接请求,关闭监听,接受请求,从而与请求的客户机建立连接
If tcpServer.State <> sckClosed Then tcpServer.Close '
tcpServer.Accept requestID
End Sub
==============================================
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
‘收到客户端数据,进行相应处理
tcpServer.GetData s, vbString, 100
board.Text = s & vbCrLf & board.Text
End Sub
==============================================
Private Sub Command4_Click()
‘关闭服务器
tcpServer.Close
Command3.Enabled = True
End Sub
*****************************************************************
5、  客户机模块关键代码
Private Sub Command1_Click()
‘与服务器建立连接
On Error GoTo errShow
If Len(serverIP.Text) = 0 Or Len(serverPort.Text) = 0 Then
MsgBox ("请输入主机名或主机IP地址。")
Exit Sub
Else
tcpClient.RemoteHost = serverIP.Text
tcpClient.RemotePort = serverPort.Text
End If
tcpClient.Connect
Command1.Enabled = False
Exit Sub
errShow:
MsgBox "连接失败,请查看对方服务器是否启动"
tcpClient.Close
End Sub
=================================================
‘向服务器发送数据
tcpClient.SendData (myName.Text & "(" & myIP.Text & ")对你说:" & message.Text)
=================================================
‘关闭与服务器的连接
tcpClient.Close
 
四、可能要用到的winSocket状态常数
常數  值 描述
sckClosed  0  缺省值,关闭。
SckOpen 1 打开。
SckListening 2 侦听
sckConnectionPending 3 连接挂起
sckResolvingHost 4 识别主机。
sckHostResolved 5 已识别主机
sckConnecting 6 正在连接。
sckConnected 7 已连接。
sckClosing 8 同级人员正在关闭连接。
sckError  9   错误。
 
五、总结
使用Winsocket组件十分方便,但是要真正熟练运用它来实现网络应用程序的开发,则必须仔细阅读关于它的帮助文件和示例程序。在不断的学习中比较这种方法的优点,掌握其编程特点,进而掌握VB中所提供的其它网络组件,例如:NMPOP3、NMUDP、NMFTP等的编程技巧。到那时,你就会有能力参与真正意义上的网络应用程序的开发,而不是停留在拿来别人的网络应用软件,设置一番、会熟练操作的水平上。

[浏览: 次]   
上一篇:delphi MS的AVICAP32.DLL的API   下一篇:delphi Base64编码/解码及ZLib压缩/解压
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi 用Delphi实现远程控制
·delphi 木马DIY
·delphi Delphi实现UDP广播
·delphi 检测计算机的 Internet 连接状
·delphi 获取BIOS信息
·delphi Base64编码转换
·delphi 发送raw IP类型的数据包
·delphi 使用ftp控件下载目录
·delphi 获取IP地址以及全部TCPIP连接的
·delphi 编写上网计费软件
·delphi 监测TCP IP协议是否安装了
·delphi Modem的指令
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932