浅谈C#Socket

好不容易把socket通讯搞懂一点,比较喜欢作笔记,嘿嘿~html

但愿共同窗习,共同进步!

socket通讯是C#中很是基础的一个知识点,我这里用到的是基于Tcp协议的socket通讯。Tcp会有三次握手链接通讯.数组

 1、 建立服务端socket步骤:网络

      1.首先须要引用socket通讯中所用到的名称空间;socket

         

using System.Net;
using System.Threading;
using System.Net.Sockets;

         这三个名称空间是为socket通讯打基础,没有这三个名称空间没法实现socket通讯.tcp

      2.接下来就是要建立一个socket的对象了,建立socket对象是为了方便客户端与服务端之间的通讯,若是你还不明白,就请往下继续看;post

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

         在这里面有几个知识点我要补充一下:学习

         socket类中的参数我作简要阐述,AddressFamily.InterNetwork简单来讲就是使用内网,啥,你不知道内网是什么东东?至于内网是啥,内网就是不能上互联网的局域网;SocketType.Stream是流式的套接字类型,这种套接字类型是一种可靠且双向,基于链接的字节流,不重复数据,简单一点就是支持双向通讯;ProtocolType.Tcp指的是使用基于tcp协议的通讯协议。url

      3.绑定IP地址和端口号;spa

            //将字符串类型的IP地址转换为IPAddress类型
            IPAddress ip = IPAddress.Parse("173.168.5.15");
            //标识网络地址
            EndPoint point = new IPEndPoint(ip,port);
            serverSocket.Bind(point);

 若是你想实现socket通讯就必须绑定IP地址和端口号,IP地址是计算机的通讯地址,端口号指向计算机中某个软件或者说是应用程序;线程

      4.监听客户端的链接;

serverSocket.Listen(10);

        参数指的是监听客户端的最大数量。

      5.为链接到的客户端新建一个socket;

Socket ListenClientSocket= serverSocket.Accept();

       这是规定,若是不新建一个socket没法通讯。   

       这一步完成时客户端给服务端发送消息且客户端会链接到服务端,完成第一次握手。

      6.向客户端发送消息;

ListenClientSocket.Send(data);

       此时服务端给客户端发送消息完成第二次握手。

      7.接受客户端消息;

            byte[] data2 = new byte[1024];

            int length=ListenClientSocket.Receive(data2);
            string message2=Encoding.UTF8.GetString(data2,0,length);
            Console.WriteLine("接收到客户端传来的消息:"+message2);

        服务端接收到客户端的消息完成第三次握手。

 

        服务端socket   完整代码以下:

 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.Threading;
 8 using System.Net.Sockets;
 9 
10 namespace serverSocketTest2
11 {
12     class Program
13     {
14         static int port = 3500;
15         static void Main(string[] args)
16         {
17             //建立一个socket的对象
18             Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
19             //将字符串类型的IP地址转换为IPAddress类型
20             IPAddress ip = IPAddress.Parse("173.168.5.15");
21             //标识网络地址
22             EndPoint point = new IPEndPoint(ip,port);
23             serverSocket.Bind(point);
24             //开始监听
25             serverSocket.Listen(10);
26             Console.WriteLine("等待客户端链接...");
27 
28             //为链接客户端须要新建一个线程
29             Socket ListenClientSocket= serverSocket.Accept();//暂停当前线程,等待客户端链接以后再执行以后的语句
30             Console.WriteLine("客户端链接成功!  真是使人振奋!");
31             //传送的消息
32             string message = "Hello Client!";
33             //将字符串类型的数据转换为byte类型的数组
34             byte[] data=Encoding.UTF8.GetBytes(message);
35             //发送消息
36             ListenClientSocket.Send(data);
37 
38             /////接受客户端数据
39             byte[] data2 = new byte[1024];
40 
41             int length=ListenClientSocket.Receive(data2);
42             string message2=Encoding.UTF8.GetString(data2,0,length);
43             Console.WriteLine("接收到客户端传来的消息:"+message2);
44 
45             Console.ReadKey();
46         }
47     }
48 }

     

 2、 建立客户端socket步骤以下:

       1.引用进行socket通讯的名称空间;

 

using System.Net;
using System.Threading;
using System.Net.Sockets;

       缘由我再也不赘述了,相信聪明的大家都懂.

       2.客户端向服务端发送链接的请求,创建客户端和服务端的链接;

clientSocket.Connect(ip,port);

       这是第一次握手。本次握手与服务端里的第一次握手同步执行,其实此次握手也是服务端里的第一次握手。

       3.接收数据;

clientSocket.Receive(data);

       在这里须要将客户端接收到的数据返回一个长度并存储到byte数组里。

       4.将字节型数据转换成字符串型的数据;

string message=Encoding.UTF8.GetString(data,0,length);

       5.发送数据

clientSocket.Send(data2);

       第二次握手链接。本次握手与服务端里的第二次握手同步执行,其实此次握手也是服务端里的第二次握手。

 

        客户端socket   完整代码以下:

 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.Threading;
 8 using System.Net.Sockets;
 9 
10 namespace clientSocketTest2
11 {
12     class Program
13     {
14         static int port = 3500;
15         static void Main(string[] args)
16         {
17             //新建一个socket
18             Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
19             IPAddress ip = IPAddress.Parse("173.168.5.15");
20             
21             //客户端向服务端发送链接的请求,创建客户端和服务端的链接
22             clientSocket.Connect(ip,port);
23             //存储数据,接收数据
24             byte[] data=new byte[1024];
25             int length=clientSocket.Receive(data);
26             //转换为字符串型的数据
27             string message=Encoding.UTF8.GetString(data,0,length);//0,length 表示的是发送的数据的长度
28             Console.WriteLine("接收到来自服务端的数据:"+message);
29 
30             ///////   发送数据
31             string message2 = Console.ReadLine();
32             byte[] data2=Encoding.UTF8.GetBytes(message2);
33             clientSocket.Send(data2);
34 
35             Console.ReadKey();
36 
37         }
38     }
39 }

 

     这是个人理解,若是有不足的地方,请指教,共同窗习!但愿共同进步!

相关文章
相关标签/搜索