博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈C#Socket
阅读量:4357 次
发布时间:2019-06-07

本文共 4756 字,大约阅读时间需要 15 分钟。

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

希望共同学习,共同进步!

socket通信是C#中非常基础的一个知识点,我这里用到的是基于Tcp协议的socket通信。Tcp会有三次握手连接通信.

 一、 创建服务端socket步骤:

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

         

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

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

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

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

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

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

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

//将字符串类型的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 serverSocketTest211 {12     class Program13     {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 }

     

 二、 创建客户端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 clientSocketTest211 {12     class Program13     {14         static int port = 3500;15         static void Main(string[] args)16         {17             //新建一个socket18             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 }

 

     这是我的理解,如果有不足的地方,请指教,共同学习!希望共同进步!

转载于:https://www.cnblogs.com/jc-1997/p/6187413.html

你可能感兴趣的文章
Linux重定向与管道
查看>>
string.indexOf()和$.inArray()查找
查看>>
lamp :在Linux 下搭建apache、Mysql、php
查看>>
【编程题目】圆形是否和正方形相交☆
查看>>
1.Struts2简介和Struts2开发环境搭建
查看>>
2019 CCPC-Wannafly Winter Camp Day4(Div2, onsite)
查看>>
SAP CRM 集类型(Set Type)与产品层次(Product Hierarchy)
查看>>
spring mvc
查看>>
poj 3071 Football(线段树+概率)
查看>>
Python爬虫入门教程 26-100 知乎文章图片爬取器之二
查看>>
面试题39 二叉树的深度
查看>>
Linq update
查看>>
CSRF
查看>>
【计算机网络】OSI模型,TCPIP模型
查看>>
Token 认证的来龙去脉
查看>>
Oracle——视图
查看>>
No input file specified
查看>>
获取字符串中出现次数最多的字符
查看>>
Selenium3自动化问题一:selenium3在火狐浏览器执行driver.quit()报错2052解决方案
查看>>
hdoj1754 线段树--单点更新
查看>>