C# Socket网络通信初探(一)

来源:互联网 发布:mac液体唇膏试色大全 编辑:程序博客网 时间:2024/04/26 23:29
使用C#来实现网络通信时,需要使用到windows Socket来实现。
网络通信的方式一般包括P2P(对等模式)和C-S(客户端-服务器模式),其中对等模式又分为纯粹的对等模式(不包含服务器)和非纯粹的对等模式(例如QQ)。


使用windows socket实现简单的网络通信只需要简单的几步:
以C-S模式为例:
在服务器端:


首先,声明一个Socket用于监听某个端口:
      private Socket ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
      可以看到,在创建新的Socket对象时有三个参数,分别是:
            AddressFamily 表示地址族,在windows下进行网络编程一般都设置为InterNetwork;
            SocketType 表示Socket的类型,常见包括Stream类型和DGram类型,其中Stream是可靠、双向基于连接的字节流,不重复数据;DGram支持数据报,即有最大数据长度、无连接、不可靠的消息。通常使用Stream。
            ProtocolType表示协议类型,此处使用TCP协议。
     之后将Socket绑定到本机的一个IPEndPoint对象上,IPEndPoint是IP终端类,继承自EndPoint,一般用IPAdress和Port构造;
            IPAdress localIP = IPAdress.Parse(string IPStr);根据IP地址字符串建立IPAdress对象
            IPEndPoint ipe = new IPEndPoint(IPAdress localIP,int LocalPort);创建IPEndPoint对象
            ListenSocket.Bing(ipe);绑定
            ListenSocket.Listen(int num);将Socket处于监听状态
     如此,监听端就可以开始监听客户端的连接请求了
     同时,使用
            Socket mySocket = ListenSocket.accept();
     获得客户端的连接请求并将一个Socket类型的值返回给mySocket


之后,在客户端,在向服务器端发起连接请求时,首先声明一个本地的Socket
     private Socket localSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     之后,调用函数
     localSocket.connect(IPEndPoint ipe);向ipe指定的端口申请网络连接
     如果申请成功,则返回一个Socket给localSocket


之后,在客户端和服务器端之间就可以实现通信了


通信所使用的几个主要函数是:


      socket.send(byte[] buffers, int offset, int size, SocketFlags socketFlags);   发送buffer中字节序列到socket中
      socket.receive(byte[] buffers,int offset,intsize,SocketFlags socketFlags);   接收socket中缓存的字节序列到buffer中


      socket.SendBufferSize 和 socket.ReceiveBufferSize  两个属性,分别用于设置发送端和接收端的最大缓冲长度,也就是一次性可以发送和接收的数据的长度,以字节为单位;


      socket.RemoteEndPoint  和  socket.LocalEndPoint  分别表示一个Socket连接本地的和对应端的EndPoint终端,可以获取相关的信息或者进行设置

原创粉丝点击