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协议的通信已经完成。

(0)

相关推荐

  • 利用Tcp和socket实现的客户端与服务端的简单通信

    /*服务端*/ using System; using System.Collections.Generic; using System.Collections; using System.Colle ...

  • 六大通信库,围攻西门子

    自动化行业,正在慢慢往软件行业靠近. 西门子PLC通信一直都是很多人感兴趣的话题. 本文主要以C#作为编程语言,结合目前市场上常用的6种通信库,分别与西门子S7-1200PLC进行通信测试,并对测试结 ...

  • Socket编程 (连接,发送消息) (Tcp、Udp)

    本篇文章主要实现Socket在Tcp\Udp协议下相互通讯的方式.(服务器端与客户端的通讯) 1.基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端主动推送消息 ...

  • Windows Socket和Linux Socket编程的区别

    SOCKET在原理上应该是一样的,只是不同系统的运行机置有些不同.Socket 编程 windows到Linux代码移植遇到的问题1.一些常用函数的移植http://www.vckbase.com/d ...

  • Socket编程基础学习

    Socket编程基础学习

  • 基于Socket编程的聊天工具【Java实现】

    思路: 要实现聊天功能,我们就必须有服务器和客户端.客户端连接到服务器,然后通过发送消息到服务器及从服务器读取消息来达到多客户端通信的目的.简单来说,所有客户端都是通过服务器来进行身份验证和消息发送的 ...

  • 台达DVP-ES3用Socket编程做以太网开放式通信客户端

    台达DVP-ES3系列PLC做以太网开放式通信客户端.以太网调试助手做服务器,程序实现了PLC和以太网调试助手相互发送接收8个字节数据,视频详细讲解了SCONF.SOPEN.SCLOSE和SSEND指 ...

  • Linux Socket编程-基础知识点

    套接字(Socket)按照操作类型可以分为三类: 1.流式套接字(SOCK_STREAM):面向连接的Socket,只能收发 TCP 协议的数据: 2.数据报式套接字(SOCK_DGRAM):面向无连 ...

  • 简单说说Python Socket编程步骤?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • python socket编程详细介绍

    第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发.下面讲的是Socket模块功能1.Sock ...

  • Socket编程

    大神请绕路而走,本文适合入门小白 声明:本教程为小编收集,小编已学习,如果你读完有不懂地方或者本文在哪有出入侵权,可联系微信号18926447914处理.(PS加微信备注程序员可加入深圳程序员交流群, ...