C#.Net Socket网络通讯编程
来源:互联网 发布:ps3 淘宝 编辑:程序博客网 时间:2024/05/16 01:30
<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;mso-font-charset:0;mso-generic-font-family:roman;mso-font-pitch:variable;mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face{font-family:楷体_GB2312;panose-1:2 1 6 9 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:modern;mso-font-pitch:fixed;mso-font-signature:1 135135232 16 0 262144 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@楷体_GB2312";panose-1:2 1 6 9 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:modern;mso-font-pitch:fixed;mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-unhide:no;mso-style-qformat:yes;mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman","serif";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}.MsoChpDefault{mso-style-type:export-only;mso-default-props:yes;font-size:10.0pt;mso-ansi-font-size:10.0pt;mso-bidi-font-size:10.0pt;mso-ascii-font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-hansi-font-family:"Times New Roman";mso-font-kerning:0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;}-->
C#.Net Socket网络通讯编程
1、理解socket
1)、Socket接口是TCP/IP网络的应用程序接口(API)。Socket接口定义了许多函数和例程,程序员可以用它们来开发TCP/IP网络应用程序。Socket可以看成是网络通信上的一个端点,也就是说,网络通信包括两台主机或两个进程,通过网络传递它们之间的数据。为了进行网络通信,程序在网络对话的每一端都需要一个Socket。
2)、TCP/IP传输层使用协议端口将数据传送给一台主机的特定应用程序,从网络的观点看,协议端口是一个应用程序的进程地址。当传输层模块的网络软件模块要与另一个程序通信时,它将使用协议端口。Socket是运行在传输层的API,所以在使用Socket建立连接发送数据时,要指定一个端口给它。
3)、根据通信性质的不同,可以把Socket分成3类:
① Stream socket(流套接字):该类Socket提供双向、有序、无重复的数据流服务,它使用于处理大量网络数据;
② Dgram Socket(数据报套接字):该类Socket支持双向的数据流,但不保证数据传输的可靠性、有序性和无重复性,也就是说一个从Dgram Socket接收信息的进程,有可能发现信息重复或和发出时顺序不同的情况;
③ Raw Socket(原始套接字):该类 Socket可以访问底层的协议。
4)、使用Socket接口进行网络通信的过程如图5-1所示,简要步骤如下:
① 建立一个socket;
② 按要求配置socket,即将socket连接到远程主机或给socket指定一个本地协议端口;
③ 按要求通过socket发送和接收数据;
④ 关闭此socket。
2、C#编程要点
根据上述的步骤,使用C#设计通过Socket 实现点对点通信的程序需要掌握4个编程要点:socket的构造、socket的配置和连接、数据的发送和接收、socket的关闭。
1)、命名空间的添加
using System.Net;
using System.Net.Socket; //用于操纵Socket类
2)、构造一个新的socket对象
在C#中,采用socket函数构造一个socket对象,socket函数原型如下:
public Socket (AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);
AddressFamily成员指定socket用来解析地址的寻址方案。例如,InterNetwork表示需要一个IP版本4的地址,InterNetworkV6表示IP版本6的地址。
SocketType参数指定Socket的类型。例如,Raw支持对基础传输协议的访问,Stream支持可靠、双向、基于连接的数据流。
ProtocolType指定Socket类支持的协议。例如,IP表示网际协议,TCP表示传输控制协议。
注意:3个参数不是独立的,有些地址族会限制可与其一起使用的协议,并且套接字类型在协议中通常是隐式的。如果地址族、套接字类型和协议类型不匹配将导致无效的Socket。
例如,构造一个新的Socket 对象,采用IP版本4的地址,支持可靠、双向、基于连接的数据流,采用TCP协议:
Socket sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)
3)、Socket的配置和连接
为了将Socket和主机关联,必须将主机表示成网络端点的形式。在C#中,采用IPEndPoint类表示网络端点,IPEndPoint函数原型如下:
① public IPEndPoint(IPAddress address,int port)
参数:address表示IP地址,port表示提供服务的端口号。
在服务器端将构造socket对象与表示服务器的网络端点绑定,然后开始进行监听,在收到连接请求后建立连接。
主要用语以下3个函数:Bind、Listen和Accept。
函数原型如下:
② public void Bind(EndPoint localEP)
参数localEP为与socket关联的网络端点。
③ public void Listen(int backlog)
参数backlog为挂连接队列的最大长度
④ public Socket Accept()
返回值为socket,用于处理接收的连接请求。
例:构造一个服务器的网络端点,对socket进行绑定,开始监听,接受连接请求。
IPAddress ServerIP=IPAdress.Parse("192.18.16.186"); //设定服务器IP地址
IPEndPoint Server=new IPEndPoint(ServerIP,8866); //生成服务器网络端点
Socket Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp) // 构造一个socket
Sock.Bind(Server); //将socket和服务器绑定
Sock.Listen(8); //开始监听,允许连接队列的长度为8
Socket connectsock=sock.Accept(); //返回socket,用于同连接请求的socket通信
客户端向服务器端发出连接请求,用到Connect函数,Connect函数原型如下:
⑤ public Connect(EndPoint remoteEP)
参数:remoteEP表示要连接的服务器端点。例如向服务器端发出连接请求,服务器IP为ServerIP,端口为Port。
IPEndPoint Server=new IPEndPoint(ServerIP,Port); //定义要连接的服务器端点
Sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp) // 构造一个socket
Sock.Connect(Server); // 与服务器连接
4)、数据的传送和接收
使用两个用于传送和接收数据的函数:Send、Receive。函数原型如下:
◆ public int Send(byte[] buffer,int size,SocketFlag socketFlags)
参数:buffer表示要发送的数据;size表示要发送数据的大小;socketFlags提供Socket消息的常数值,具有允许按位组合其成员值的属性。
返回值为发送到socket的字节数。
◆public int Receive(byte[] buffer,int size,SocketFlage socketFlags)
参数:buffer表示接收到的数据的存储位置;size表示要接收数据的大小;socketFlags提供Socket消息的常数值,具有允许按位组合其成员值的属性。
返回值为接收到socket的字节数。
例:接收来自客户端的数据,同时将该数据返回到客户端。Socket是前面例子中定义和设置好的。
public static string data=null; //定义字符串变量存放接收到的信息
bytes=new byte[1024];
int bytesRec=connectsock.Receive(bytes,bytes.Lentgh,0); //接受来自客户端的数据
Console.WriteLine("Text received:{0}",bytes); //显示接收到的数据
connectsock.Send(bytes,bytes.Length,0); //发送数据到客户端
5)、socket的关闭
在socket关闭之前,要确保已经发送和接收完所有挂起的数据,因此在关闭socket之前,要先调用Shutdown,函数原型如下:
◆public void Shutdown(SocketShutdown how)
参数:SocketShutdown指定不再允许的操作。成员名称:Both禁止socket发送和接收;Receive禁止socket接收数据;Send禁止socket发送数据。
采用close函数强制关闭Socket连接。函数原型如下:
◆public void clsoe()
当该套接字被关闭时,Connected属性将被设置为false。
- C#.Net Socket网络通讯编程
- C#.Net Socket网络通讯编程
- C++:01 网络通讯之socket
- C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)
- Javase网络通讯(socket编程)群聊系统
- java C/S socket 网络通讯模型
- 网络通讯---socket
- 网络通讯,socket
- Socket 网络通讯
- socket网络通讯
- [C#] .net网络编程之一:Socket编程
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--类设计1[使用IE浏览本页]
- .Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--类设计2[使用IE浏览本页]
- Net网络通讯编程[利用Socket实现字串、文件、序列化对象传输]--前面6篇博文全部源代码下载地址
- C/C++网络通讯编程(一)
- C/C++网络通讯编程(二)
- C/C++网络通讯编程(三)
- 基于Socket编程实现平行主机之间网络通讯
- getopt的使用
- PCB元件封装库命名规则简介
- 关于for语句
- ORA-16072: a minimum of one standby database destination is required
- 查询与删除重复记录的方法
- C#.Net Socket网络通讯编程
- 单片机unsigned char code/unsigned char idata变量
- 从头学习Drupal--基本概念
- 不知CSDN怎么搞的,别人编辑的文章恢复到我这里来了
- zoj 2704 Brackets
- Android系统简单研究后的缺陷总结
- SamSun R508 Geforce9200 GM for Windows2003驱动程序安装方法
- C#串口编程遇到的问题以及解决方法
- maven基础一