打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#socket编程

我们做网络通信的时候需要有通信协议,在进行socket编程的时候有两种通信协议TCP、UDP,这次我们就用简单的方式在一台电脑建立TCP协议的服务器端和客户端并使之进行通信。

服务器端和客户端进行连接,第一步就行在服务器端创建一个socket,开始监听客户端的连接,然后在客户端创建一个socket,向服务器端发起连接,这样连接建立起来之后就可以进行数据的交换。

由于Visual Studio一个解决方案下边只能启动一个项目,所以我们要创建两个解决方案(打开两个VS),一个解决方案下边创建服务器端,另一个解决方案下边创建客户端(均为控制台应用程序)。

我们先来看完整的代码,之后在分步骤进行解释

服务器端:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace socket编程_TCP协议_服务器端{    class Program    {        static void Main(string[] args)        {            //1.创建socket            Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //2.绑定IP跟端口号            IPAddress ipaddress = new IPAddress(new byte[] { 192,168,1,145 });            EndPoint point = new IPEndPoint(ipaddress, 5566);            tcpServer.Bind(point);//向操作系统申请一个可用的IP地址和端口号,用来做通信            //3.开始监听 等待客户端连接            tcpServer.Listen(100);//参数为最大连接数            Console.WriteLine("开始监听");            Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接 //使用返回的Socket跟客户端做通信            Console.WriteLine("一个客户端连接");            //4.向客户端发送数据            string message = "Hello";            byte[] data = Encoding.UTF8.GetBytes(message);            clientSocket.Send(data);//Send方法只能接受byte类型,于是先把数据转为byte类型。            Console.WriteLine("向客户端发送一条数据");            //5.接收客户端的数据            byte[] data2 = new byte[1024];//创建字节数组接收客户端的数据 返回值length表示接收了多少字节的数据            int length = clientSocket.Receive(data2);            string message2 = Encoding.UTF8.GetString(data2, 0, length); //只把接收到的数据(0 - length)进行转化            Console.WriteLine("接收到了一条消息:" + message2);            Console.ReadKey();        }    }}

客户端:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace socket编程_TCP协议_客户端{    class Program    {        static void Main(string[] args)        {            //1.创建Socket            Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //2.发起建立连接请求            IPAddress ipaddress = IPAddress.Parse("192.168.1.145");            EndPoint point = new IPEndPoint(ipaddress, 5566);            tcpClient.Connect(point);//通过IP和端口号,定位一个要连接到的服务器端            //3.接收数据            byte[] data = new byte[1024];            int length = tcpClient.Receive(data);//传递一个byte数组,实际上是用来接收数据 返回值length表示接收了多少字节的数据            string message = Encoding.UTF8.GetString(data,0,length);//只把接收到的数据(0-length)进行转化            Console.WriteLine(message);            //4.向服务器端发送消息            string message2 = Console.ReadLine();//读取用户输入            tcpClient.Send(Encoding.UTF8.GetBytes(message2));//把字符串转为字节数组 发送到服务器端            Console.ReadKey();        }    }}

下边我们来分布进行解释

1.首先我们先来创建服务器端

(1)创建Socket(Socket属于命名空间System.Net.Sockets下的一个类),参数选择InterNetwork(内网)、Stream(流),以及我们的Tcp协议。

//1.创建socketSocket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

(2)绑定IP跟端口号

每个计算机都有一个网络的地址(也可能有多个网卡,就会有不同的IP地址,我们要选择指定的IP地址进行通信),局域网的地址一般为192.168.x.x,即为IP地址,但是仅仅获取IP地址就可以了吗?显然是不行的,每个计算机都有很多软件,需要通信的软件有很多个,如果只通过IP地址发送数据,计算机并不能判断数据要发送给哪个软件,所以这个时候就需要通过端口号区分数据所要分配的软件,每个软件申请的端口号是唯一的,端口号一般为0-60000。所以通过IP地址找到计算机,通过端口号找到软件,我们才可以进行通信。

如何查看本机的IP地址?

在控制台中输入ipconfig,回车。

这里可以看到我的IP地址为192.168.1.145。端口号可以随便取,这里我们就采用5566。

接着我们继续写代码

//2.绑定IP跟端口号IPAddress ipaddress = new IPAddress(new byte[] { 192,168,1,145 });EndPoint point = new IPEndPoint(ipaddress, 5566);tcpServer.Bind(point);//向操作系统申请一个可用的IP地址和端口号,用来做通信

(3)开始监听 等待客户端连接

//3.开始监听 等待客户端连接tcpServer.Listen(100);//参数为最大连接数Console.WriteLine("开始监听");Socket clientSocket = tcpServer.Accept();//暂停当前线程,直到有一个客户端连接 //使用返回的Socket跟客户端做通信Console.WriteLine("一个客户端连接");

(4)向客户端发送消息

//4.向客户端发送数据string message = "Hello";byte[] data = Encoding.UTF8.GetBytes(message);//Send方法只能接受byte类型,于是先把数据转为byte类型。clientSocket.Send(data);Console.WriteLine("向客户端发送一条数据");

(5)接收消息、

//5.接收客户端的数据byte[] data2 = new byte[1024];//创建字节数组接收客户端的数据 返回值length表示接收了多少字节的数据int length = clientSocket.Receive(data2);string message2 = Encoding.UTF8.GetString(data2, 0, length); //只把接收到的数据(0 - length)进行转化Console.WriteLine("接收到了一条消息:" + message2);

2.创建客户端

(1)创建Socket

//1.创建SocketSocket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

(2)发起建立连接请求

//2.发起建立连接请求 IP地址和端口号要和服务器端保持一致IPAddress ipaddress = IPAddress.Parse("192.168.1.145");//此方法也可以绑定IP地址EndPoint point = new IPEndPoint(ipaddress, 5566);tcpClient.Connect(point);//通过IP和端口号,定位一个要连接到的服务器端

(3)接收数据

//3.接收数据byte[] data = new byte[1024];int length = tcpClient.Receive(data);//传递一个byte数组,实际上是用来接收数据 返回值length表示接收了多少字节的数据string message = Encoding.UTF8.GetString(data,0,length);//只把接收到的数据(0-length)进行转化Console.WriteLine(message);

(4)向服务器端发送消息

//4.向服务器端发送消息string message2 = Console.ReadLine();//读取用户输入tcpClient.Send(Encoding.UTF8.GetBytes(message2));//把字符串转为字节数组 发送到服务器端

——————————————————————————————————————————————————

此时我们已经可以进行测试,首先启动服务器端

然后启动客户端,此时服务器端已经发生变化

向服务器端发送消息

此时一个简单的tcp协议的通信已经完成。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# .net2.0 套接字编程实例 UDP TCP通信
基于C#的socket编程的TCP异步实现
多线程Socket 编程实现局域网通信
实现了本机两个进程之间的通信 c#.net socket
C#网络编程(二)
C#广播程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服