最近阅读了周存杰编写的《C#网络编程实例教程》并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他人的学习,同时也有一些自己以前学习的计算机网络、操作系统等相关知识。
一. 套接字编程的概念
套接字(Winsock)是一种独立于协议的网络编程接口,在OSI中集中在会话层和传输层
(补充知识)简单回归网络知识,计算机网络中的”五层协议的体系结构”和”OSI体系结构”如下图所示:
其中它们每层实现的功能,构成的网络通信简单的示意图如下图所示:(“网际层”对应”网络层”,”网络接口层”对应底层的”数据链路层+物理层”)
TCP/IP协议的第一个BSD UNIX提供了一个访问通信协议的调用——Socker。Socket类提供了对套接字的支持,提供了一整套属性和方法实现对端口的绑定、监听、连接、数据传输,其中套接字编程接口使用的命名空间为System.Net.Sockets。
(补充知识)在.Net网络中常用的类如下所示:
Socket:实现构造一个新的套接字接口对象
Dns:提供简单的域名解析功能
IPAddress:提供网际协议(IP)地址的支持,其方法含定义获取主机的IP地址
IPEndPoint:将网络端点表示为IP地址和端口号
IPHostEntry:为网络主机地址信息提供容器类,构造一个主机对象
NetworkStream:提供用于网络访问的基础数据流
TcpLinster:从TCP网络客户端监听连接
TcpClient:为TCP网络服务提供客户端连接
UdpClient:提供用户数据报(UDP)网络服务
二.Socket类属性
Socket类常见属性如下所示:
AddressFamily:定义套接字地址家族,常见的为InterNetwork
Available:获取从网络已接受到的且可以读取的数据量的大小,存放网络缓冲区中还未处理的数据的大小
Blocking:决定是否是套接字工作在阻塞模式,默认为False
Connected:获取套接字是否连接成功的信息,True为连接成功,False为连接失败
Handle:获取操作系统句柄
LocalEndPoint:获取本地终端的信息
ProtocolType:定义套接字使用的协议的类型,常见的为Tcp
RemoteEndPoint:远程终端信息
SocketType:定义套接字类型,数据流或数据包
(补充知识)在网络编程中常使用的两种方法,socket类亦支持该两种基本模式——同步和异步。
同步:对执行网络操作的函数的调用一只等到操作完成后才将控制返回给调用程序;
异步:网络操作的函数调用立即返回。
同步方法调用在程序继续执行之前需要等待同步方法执行完毕返回结果,异步方法则在被调用之后立即返回以便程序在被调用方法完成其任务的同时执行其它操作。因为同步方法调用会导致程序流程中途等待,所以采用同步方法的情况下往往会导致程序执行的延迟,相比来说。在某些条件下选择异步方法调用就可能更好一些。
举个例子:(引用别人的例子http://zhidao.baidu.com/question/97924815.html)
Socket传输中拿TCP传输为例。假设服务器A客户机B进行通信传输。首先需要在A机建立监听线程。监听某一端口,那么B机可以向A机发送通讯请求,B机连接到A机以后。A机可以从他的监听队列中取的一个监听对象。在A端拿到了这个Socket对象就可以进行接收跟发送数据了。这里问题就出现了。假如B端在请求A端的时候请求成功就发送一条数据。那么
A端就可以直接拿Socket对象得到他的信息。但是假如B端并没有在连接成功后直接发送信息而是在后来不确定的时间这内发送的信息。那么A端就无法得到这条信息。通常的做法是用一个定时器去不短的扫描这个数据缓存区。看是不是有数据存在这样效率非常低下。那么如何解决这个问题呢。就用到了我们的异步传输。异步传输的原理是。在A端得到这个SOCKET对象以后并不是直接去接收数据而是建立一个回调函数。回调函数是由系统维护的。他在指定的时间自动去扫描数据存储区。假如有数据他就把数据存储到指定的字节数组中。不用用户自己去关心。
三.Socket编程常用方法
这里主要介绍几种常用的套接字编程方法:
1.构造方法
构造一个新的套接字对象,该方法调用时前面须添加new,返回值为套接字对象实例.
public Socket(
AddressFamilyaddressFamily, //网络类型
SocketTypesocketType, //套接字类型
ProtocolTypeprotocolType); //使用的协议
)
2.Bind()方法
绑定特殊端口用于监听
public void Bind(EndPoint loadEP) //本地主机,如IPEndPoint对象
3.Listen()方法
该方法用于监听端口
public void Listen(int bcaklog) //最大可处理的连接数
4.Accept()方法
该方法用于决定套接字的状态,用于新建一个套接字处理新建的连接
public Socket Accept() //返回值为新的套接字对象实例
5.BeginAccpet()和EndAccept()方法
该方法用于异步处理连接请求,与Accept()方法区别是Accept()立即处理连接请求,它是异步处理.
public IAsyncResult BeginAccept(
AsyncCallBack callback, //异步回调
objecet state //自定义对象
)
EndAccpet()用于结束一个处理异步连接请求和BeginAccept()方法配合使用.
public socket EndAccept(IAsynResult asyncResult) //为处理的套接字请求,即BeginAccept()方法的请求.
由于作者还在学习当中,还有很多方法,下面只提供方法名,具体的方法参数自己再去查找.
Connect()、BeginConnect()\EndConnect()、Close()、send()、BeginSend()\EndSend()、SendTo()、BeginSendTo()\EndSendTo()、Receive()、BeginReceive()\EndReceive()、ReceiveFrom()、GetSocketOption()等方法.
四.总结
上面的叙述就是我最近学习的C#网络编程关于套接字的一些基础知识的理解,其中主要的内容是根据阅读的书。同时参考了一些网上资料及自己学过的网络知识和操作系统知识,这篇总结对我以后的网络编程的学习很有帮组,希望也能帮组大家。同时如果有错误或不足之处,希望大家原谅!最后感谢我看的周存杰同志编写《C#网络编程实例教程》书籍。
(BY:Eastmount 2013-7-13-夜10点)
分享到:
相关推荐
《c#网络编程高级篇之网页游戏辅助程序设计》涉及的领域包括多线程编程技术、socket套接字编程、tcp协议编程、http协议编程、远程控制技术、木马技术、模拟键盘和鼠标技术、网页游戏辅助程序设计技术等。 《c#网络...
了解TCP/IP结构及其基本概念。 掌握.NET网络编程基础知识。 掌握套接字编程的基本原理。 掌握C#中的多线程编程方法。
• 了解TCP/IP结构及其基本概念。 • 掌握.NET网络编程基础知识。 • 掌握套接字编程的基本原理。 • 掌握C#中的多线程编程方法。
1.3 套接字 1.3.1 Socket类 1.3.2 面向连接的套接字 1.3.3 无连接的套接字 1.4 网络流 习题 第2章 TCP应用编程 2.1 同步TCP应用编程 2.1.1 使用套接字发送和接收数据 2.1.2 ...
本文是该系列第一篇,主要讲述了基于套接字(Socket)进行网络编程的基本概念,其中包括TCP协议、套接字、聊天程序的三种开发模式,以及两个基本操作:侦听端口、连接远程服务端;第二篇讲述了一个简单的范例:从...
C# 网络编程,ftp服务课件,包括服务器,客户端,可以上传下载文件,使用socket套接字,在vs2003基础上修改升级到vs2012,在vs2012中调式通过。 修改多线程调用主线程控件时,使用委托
第4部分开始介绍C#网络编程基础,内容包括网络通信量的监视、TCP和UDP编程简介、DNS的使用和套接字编程简介等。第5部分深入介绍了C#套接字编程的相关内容,包括面向连接的TCP协议编程、无连接的UDP协议编程、异步套...
C#网络应用编程。 第一部份:网络编程基础...异套接字编程 9.使用线程 10.IP组播 第三部分 应用层的编程实例 11.ICMP 12.SNMP 13.SMTP 14.HTTP<br>15.活动目录 16.远程技术 17.网络安全
网络编程基础1:套接字和地址
掌握.NET网络编程基础知识。 掌握套接字编程的基本原理。 掌握C#中的多线程编程方法。
本书是关于C#网络开发的教材,主要包括三个方面内容,首先...最后是高级应用,包括Win32网络组件开发、Web数据库基础、Win32异步套接字数据库开发、XML Web Services开发以及一个完整的分布式网络应用程序开发实例。
本书共分13章,第1章介绍了利用Visual C# 2005提供的网络命名空间下的诸多API进行套接字的开发,并对网络编程的原理进行了详细的阐述,为后续的章节奠定了基础。 第2章介绍了具有多线程能力的网络应用程序,这使得...
最后是高级应用,包括Win32网络组件开发、Web数据库基础、Win32异步套接字数据库开发、XML Web Services开发以及一个完整的分布式网络应用程序开发实例。 本书适合于C#开发人员进行网络开发,对Visual C++.NET和...
1.3.2 面向连接的套接字 21 1.3.3 无连接的套接字 23 1.4 网络流 24 1.5 习题1 25 第2章 TCP应用编程 27 2.1 同步TCP应用编程 28 2.1.1 使用套接字发送和接收数据 28 2.1.2 使用NetworkStream对象发送和接收数据 30 ...
本书共分为11章,全面深入地介绍了.NET网络编程技术,内容分别涉及到物理网络的体系结构、网络协议和OSI模型、.NET中的套接字编程、TCP和UDP、HTTP和多播套接字、Internet编程和用于发送电子邮件的.NET类、.NET中的...
自己在学习C#网络编程过程中收集的一些资料,自我感觉适合入门级的朋友下载,主要讲网络编程有关的基础知识及小实例。
网络程序设计丛书之C#网络核心编程 关于C#网络开发的教材,主要包括三个...最后是高级应用,涉及Win32网络组件开发、Web数据库基储Win32异步套接字数据库开发、 XML、WebServices开发及分布式网络应用程序开发实例等。
最后是高级应用,包括Win32网络组件开发、Web数据库基础、Win32异步套接字数据库开发、XML Web Services开发以及一个完整的分布式网络应用程序开发实例。 本书适合于C#开发人员进行网络开发,对Visual C++.NET和...
Microsoft.Net Framework 为应用程序访问Internet 提供了分层的、可扩展的以及受管辖的网 络服务,其名字空间...套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet 不断 扩展的需要。
语言:中文 简介:首先简要介绍了有关C#网络开发的基础...最后是高级应用,包括Win32网络组件开发、Web数据库基础、Win32异步套接字数据库开发、XML Web Services开发以及一个完整的分布式网络应用程序开发实例。