.winsock控件使用心得(tcp传输)

winsock控件使用心得(tcp传输)

            为养成编程积累的好习惯我开始写日志了。。。。。。此日志为本人第一个关于编程心得如果你正好在找关于winsock的相关内容那么就请看看吧。
            本片文章没有深的内容,因为我本身也是一个初学者,现在我就以一个初学者的角度分析一下winsock。
1、首先什么是winsock?
winsockWindows下网络编程的规范-Windows SocketsWindows下得到广泛应用的、开放的、支持多种协议的网络编程接口。
2、winsock的两种协议分别是什么?

协议有两种分别是TCP/IPUDP他们的区别在于:

l        TCP 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。

l        UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。

笔者目前只使用过TCP/IP的传输协议因此就不对UDP做详解了如果想了解UDP可以自行查询MSDN或者上网找现成例子。

 3、我在此分享一个我写的实例关于传输部分暂时是借鉴我群里一位水平比我高的人写的例子。。。。我自己写的传输部分速度实在有点看不过去囧。。。。。http://pan.baidu.com/share/link?shareid=109443&uk=1560753926 一下是连接地址
 这个例子包含了基本的文件传输功能并且可以访问对方的盘符并且下载对方盘符的文件(没错。。。这个已经属于木马的性质了早期的冰河就是利用这样的原理访问遍历入侵的机器磁盘然后。。。。。。。)

     言归正传 winsock TCP协议的模式如果要我形象的比喻的话我认为它既是一个对话机制,比如我们打电话的时候我们要先知道对方的电话号码才可以拨通这个在winsock里的表示即使赋予给它一个IP地址和端口号,然后访问方根据这两个认证找到要访问的机器利用winsok里的connect方法发出请求,在被访问方接到回应后方可建立连接。
关于连接我的总结是:
访问方必要的几个参数设置:
访问方:winsock.RemoteHost(访问IP设置) 、Winsock.RemotePort(端口设置) 访问方法connect
被访问方: Winsock.RemotePort(端口设置)   监听方法 Listen
访问方利用connect方法后会触发被访问方的一个名为ConnectionRequest的事件然后返回一个类似于标示的requestID来标示已经建立连接。.
具体例子为:
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
   Winsock1.Accept requestID
End Sub
利用一个关系图来标示访问方和被访问的关系:
客户端 服务器
| |
请求连接 监听请求
| |
等待 接收请求
| |
等待 返回标识(假设返回确认)
| |
建立连接 建立连接

4、winsock发送和接收:
发送接收会用到两个方法一个是send为发送方法,另外一个味get接收方法,在整个winsock的tcp协议中这两个方法始终贯穿这整个winsock的发送接收运行每一次的send必然伴随着一个get。
send是可以存在任何地方的只要我们认为有必要给另外一方发送一个消息我们就一定要用send来发送。而get方法必须存在于DataArrival事件中而触发DataArrival事件的既是另外一端的send方法。
在winsock数据传递中所有类型在发送时必然会变为二进制格式因此发送前的数据转换是必要的操作,字符型可不用进行转换因为二进制和字符型可以在wisock中自动进行转换原理参考asc码表。
5、对文件处理
对发送文件的处理为1、将文件读到内存中 →2、发送文件基本数据给接收方→3、接收方根据接收到的数据建立缓冲区→4、接收方发送消息给发送放表示可以发送→5、发送方开始发送 在这个过程中因为wisock每次发送的数据大小是有限的因此每次只能发送一部分到就收方,然后接收方将就收数据在建立好的缓冲区拼接还原每一次的接收完成后会反馈给发送放一个发送另外一段数据的消息。

我个人写的wisock程序基本包括了大部分人利用wisock想做的功能,如果是想做视频连接等功能其实原理是一样的都是将本地的数据通过数据分割打包 send 接收方get 解包还原的原理来进行数据交换传递。

以上是我学习winsock的总结如果你看完本文章后想继续交流可以加入58689550 群本群主要以VB|Delphi|Java|VS做技术研讨。 


posted @ 2012-11-14 17:04  dongzhaosheng73  阅读(1605)  评论(0编辑  收藏  举报