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终端,可以获取相关的信息或者进行设置
网络通信的方式一般包括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终端,可以获取相关的信息或者进行设置
- C# Socket网络通信初探(一)
- socket网络通信<一>
- Socket通信---网络通信学习笔记(一)
- Socket通信---网络通信学习笔记(一)
- C#与网络通信研究(一)
- Java网络编程之Socket通信(一)
- Java网络通信学习(一)- Java Socket 编程
- Lniux网络通信一(基础知识点+Socket模型)
- socket通信(一)
- Socket通信初探
- c#下的Socket网络通信(类库)
- C# 利用socket实现语音网络通信
- android中的网络通信(一) socket编程
- Socket网络通信(二)
- Socket网络通信(三)
- 初探Socket网络编程
- JAVA系列课程讲座一:使用Socket通信实现网络通信程序(TCP方式)
- C# Socket 编程初探
- 翻译 Netty 4 开发人员指导-User Guide(1)
- 坚持自己的坚持,以不二的姿态坚持到底
- HTTP协议
- 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站
- Android静默安装
- C# Socket网络通信初探(一)
- DRUPAL-7.23的语言设置
- Linux时间函数
- 运行库 与 createthread 线程创建问题
- Eclipse中Deploy应用到GAE的错误
- (十一)二叉查找树
- 怎么用php做个翻页效果?
- 通过Wifi调试Android程序
- SIFT特征分析与源码解读