C# Socket学习笔记一_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# Socket学习笔记一

C# Socket学习笔记一

 2014/11/19 15:11:28  GC2013  程序员俱乐部  我要评论(0)
  • 摘要:首先我们要了解一下几点内容:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基本操作3.1、socket()函数3.2、bind()函数3.3、listen()、connect()函数3.4、accept()函数3.5、read()、write()函数等3.6、close()函数4、socket中TCP的三次握手建立连接详解5、socket中TCP的四次握手释放连接详解6、一个例子现阶段socket通信使用TCP、UDP协议,相对应UDP来说
  • 标签:笔记 C# 学习 socket 学习笔记

首先我们要了解一下几点内容:

  1、网络中进程之间如何通信? 2、Socket是什么? 3、socket的基本操作 3.1、socket()函数 3.2、bind()函数 3.3、listen()、connect()函数 3.4、accept()函数 3.5、read()、write()函数等 3.6、close()函数 4、socket中TCP的三次握手建立连接详解 5、socket中TCP的四次握手释放连接详解 6、一个例子 现阶段socket通信使用TCP、UDP协议,相对应UDP来说,TCP则是比较安全稳定的协议了。本文只涉及到TCP协议来说socket通信。首先讲述TCP/IP的三次握手,在握手基础上延伸socket通信的基本过程。   下面介绍对于应届生毕业面试来说是非常熟悉的,同时也是最臭名昭著的三次握手:   1 客户端发送syn报文到服务器端,并置发送序号为x。   2 服务器端接收到客户端发送的请求报文,然后向客户端发送syn报文,并且发送确认序号x+1,并置发送序号为y。   3 客户端受到服务器发送确认报文后,发送确认信号y+1,并置发送序号为z。至此客户端和服务器端建立连接。       在此基础上,socket连接过程:   服务器监听:服务器端socket并不定位具体的客户端socket,而是处于等待监听状态,实时监控网络状态。   客户端请求:客户端clientSocket发送连接请求,目标是服务器的serverSocket。为此,clientSocket必须知道serverSocket的地址和端口号,进行扫描发出连接请求。   连接确认:当服务器socket监听到或者是受到客户端socket的连接请求时,服务器就响应客户端的请求,建议一个新的socket,把服务器socket发送给客户端,一旦客户端确认连接,则连接建立。   注:在连接确认阶段:服务器socket即使在和一个客户端socket建立连接后,还在处于监听状态,仍然可以接收到其他客户端的连接请求,这也是一对多产生的原因。   下图简单说明连接过程:       下面开始进行代码分析了:   服务器端:TcpServer.cs   复制代码  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6 using System.Net;  7 using System.Net.Sockets;  8   9 namespace TcpServer 10 { 11     class Program 12     { 13         static void Main(string[] args) 14         { 15             //确定端口号 16             int port = 6000; 17  18             //设定连接IP 19             string host = "127.0.0.1"; 20  21             //将IP地址字符串转化为IP地址实例 22             IPAddress ip = IPAddress.Parse(host); 23  24             //将网络端点表示为 IP 地址和端口号 25             IPEndPoint ipe = new IPEndPoint(ip, port); 26  27             //建立Socket  28             //addressFamily 参数指定 Socket 类使用的寻址方案 29             //socketType 参数指定 Socket 类的类型 30             //protocolType 参数指定 Socket 使用的协议。  31             Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 32  33             //socket与本地终结点建立关联 34             socket.Bind(ipe); 35             while (true) 36             { 37                 //开始监听端口 38                 socket.Listen(0); 39  40                 Console.WriteLine("服务已开启,请等待....."+ DateTime.Now.ToString()); 41  42                 //为新建的连接建立新的Socket目的为客户端将要建立连接 43                 Socket serverSocket = socket.Accept(); 44                 Console.WriteLine("连接已建立......" + DateTime.Now.ToString()); 45  46                 string recStr =string.Empty; 47                 //定义缓冲区用于接收客户端的数据 48                 byte[] recbyte = new byte[1024]; 49  50                 //返回接收到的字节数 51                 int bytes = serverSocket.Receive(recbyte, recbyte.Length, 0); 52  53                 //将接收到的字节抓获年华为string 54                 //参数一:字节数组 参数二:起始索引 参数三:总长度 55                 recStr += Encoding.ASCII.GetString(recbyte, 0, bytes); 56  57                 Console.WriteLine("服务器接收到客户端的信息:" + recStr + " " + DateTime.Now.ToString()+"\n\n"); 58  59  60                 //服务端给客户端回送消息 61                 string strSend = "Hello Client!"; 62                 byte[] sendByte = new byte[1024]; 63                 //将发送的字符串转换为byte[] 64                 sendByte = Encoding.ASCII.GetBytes(strSend); 65  66                 //服务端发送数据 67                 serverSocket.Send(sendByte, sendByte.Length, 0); 68  69                 serverSocket.Close(); 70             } 71         } 72 } 复制代码     客户端的代码:   复制代码  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Text;  5 using System.Threading.Tasks;  6 using System.Net;  7 using System.Net.Sockets;  8   9 namespace TcpClient 10 { 11     class Program 12     { 13         static int port = 6000;                          //监听端口号 14         static string host = "127.0.0.1";                //连接服务端IP 15         static IPAddress ip = IPAddress.Parse(host);     //将IP地址转换为IP实例 16         static IPEndPoint ipe = new IPEndPoint(ip, port);//将网络端点表示为 IP 地址和端口号 17         static Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立客户端Socket 18         19         static void Main(string[] args) 20         { 21  22             clientSocket.Connect(ipe);                   //客户端开始连接服务端 23  24  25             string sendStr = "Hello,Server!";            //向服务器发送消息 26             byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr); 27             clientSocket.Send(sendBytes); 28  29  30             string revStr = "";                          //接收来自服务器的消息 31             byte[] revBytes = new byte[4096]; 32             int bytes = clientSocket.Receive(revBytes, revBytes.Length, 0); 33  34             revStr += Encoding.ASCII.GetString(revBytes, 0, bytes); 35             Console.WriteLine("来自服务端的回应:{0}",revStr); 36  37             clientSocket.Close(); 38         } 39     } 40 }
发表评论
用户名: 匿名