套接字学习笔记------基础篇

套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内以及整个网络间的编程界面 。

套接字类型:流套接字和数据报套接字

要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务端,称为ServerSocket

套接字连接过程:服务监听,客户端请求,连接确认

套接字处理数据的两种模式:同步套接字和异步套接字

同步套接字特点:通过socket进行连接,接收,发送操作时,客户机或服务器在接收到对方相应前会处于阻塞状态,即一直等到接受到对方请求时才能继续执行下面的语句

同步套接字适用于数据处理不太多的场合。

异步套接字:通过socket进行连接,接收,发送操作时,客户机或服务器不会处于阻塞状态,而是利用callback机制进行连接,接收,发送处理,这样就可以在调用发送或接收的方法后直接返回,并继续执行下面的程序。

适用于大量数据处理的场合。

Socket类

Socket类包含在System.Net.Socket命名空间中。一个Socket实例包含了一个本地或者一个远程端点的套接字信息。

Socket类的构造函数为: public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);

其中,addressFamily为网络类型,指定Socet使用的熏制方案,例如AddressFamily.InterNetwork表示为IP版本4的地址;socketType指定Socket的类型,例如SocketType.Stream表示连接是基于流套接字的, 而SocketType.Dgram表示连接是基于数据报套接字的。protocolType指Socket使用的协议,例如ProtocolType.Tcp表明连接协议是Tcp协议,而ProtocolType.Udp表明连接协议是UDP协议。

实例:Socket socket=new Socket(AddressFamily.InterNetwork,Socket.Stream,ProtocolType.Tcp);


该语句设置套接字发送超时时间为1000毫秒。

面向连接的套接字

ip连接领域有两种通信类型:面向连接的(connection-oriented)和无连接的(connectionless)


对于服务端的程序,建立的套接字必须绑定到用于TCP通信的本地IP地址和端口上。Bind方法用于完成绑定工作: Bind(IPEndPoint  address)

Address包括一个本地IP地址和一个端口号,套接字绑定到本地后,利用Listen方法等待客户机发出连接尝试: Listen (int backlog)

Backlog参数指出系统等待用户程序服务排队的连接数。

Accept 完成服务器做好接收任何引进连接的准备

实例: IPHostEntry local =Dns.GetHostByName(Dns.GetHostName());

             IPEndPoint iep=new IPEndPoint(local.Address[0],80);

             Socket localSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

            localSocket.Bind(iep);

           locatSocket.Listen(10);

          Socket  clientSocket=localSocket.Accept();

客户端程序也需要把一个地址绑定到创建的Socket 对象,使用Connect方法

IPAddress remoteHost=IPAddress.Parse("192.168.1.1");

PEndPoint iep=new IPEndPoint(remoteHost,80);

Socket localSocket=new Socket(AddressFamily.InterNetwork,ScoketType.Stream,ProtocolType.TCP);

localScoket.Connect(iep);


关闭连接的典型用法

sock.Shutdown(Socket.Shutdown.Both);

sock.Close();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值