• Socket简单学习之Tcp通信


    Socket网络通信的简单学习

    建立Tcp通信

    服务器端
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TcpSocket
    {
        //服务器端
        class Program
        {
            static void Main(string[] args)
            {
               
                Socket tcpSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//建立一个socket对象,用来网络通信
                IPAddress ipaddress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
                EndPoint point = new IPEndPoint(ipaddress, 5566);//配置服务器的IP和端口
                tcpSocket.Bind(point);//服务器的这个ip和端口用来接受客户端的数据
                tcpSocket.Listen(100);//设置服务器能连接的客户端的数量
                Socket client = tcpSocket.Accept();//等待客户端来连接,将客户端的连接对象存在Client对象中,没有对象连接就一直等待不执行下面代码
                byte[] date = new byte[1024];//定义一个二进制数组来存放客户端发送的数据
                int length = client.Receive(date);//接受从客户端发送的二进制数据
                string str = Encoding.UTF8.GetString(date, 0, length);//将二进制数据转化为字符串
                Console.WriteLine(str);//显示出从客户端发送的数据
                string message = "客户端已近连接服务器端了";
                byte[] date1 = Encoding.UTF8.GetBytes(message);
                client.Send(date1);//把信息从服务器端传到客户端
                while (true)//循环接收从客户端发送的数据,显示出来,并向客户端发送数据
                {
                    byte[] date2 = new byte[1024];//存放二进制的数据
                    int length2 = client.Receive(date2);//接受从客户端发送的二进制数据
                    string str1 = Encoding.UTF8.GetString(date2, 0, length);//将二进制数据转化为字符串
                    Console.WriteLine("客户端发送的数据为:"+str1);
                  
                    byte[] date3 = Encoding.UTF8.GetBytes(str1);
                    client.Send(date3);//把信息从服务器端传到客户端
                }
                Console.ReadKey();
                
            }
        }
    }

     步骤:

           1:声明Socket对象,利用构造函数给Socket对象传值,AddressFamily设置为局域网InterNetwork,socketType接受数据的类型设置为stream流,ProtocalType传输方式设置为Tcp可靠传输

      Socket tcpSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//建立一个socket对象,用来网络通信

     Socket的命名空间为using System.Net.Sockets;

           2:利用Bind()方法给服务器端绑定服务器的IP和端口用来接收数据

          Ipaddress 和EndPoint的命名空间为using System.Net

            先将ip和端口绑定到EndPoint对象上

          IpAddress address=new IpAddress(new char[]{IP地址})//绑定ip地址

          EndPoint point=new IPEndPoint(address,端口号)//绑定ip地址和端口

           tcpSocket.bind(point)//给服务器端绑定服务器的ip和端口号

     IPAddress ipaddress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
                EndPoint point = new IPEndPoint(ipaddress, 5566);//配置服务器的IP和端口
                tcpSocket.Bind(point);//服务器的这个ip和端口用来接受客户端的数据

          IpAddress address=new IpAddress(new char[]{IP地址})替换为

      IPAddress ip = IPAddress.Parse("192.168.43.92");

          IpAddress address=new IpAddress(new char[]{IP地址})//绑定ip地址

          EndPoint point=new IPEndPoint(address,端口号)//绑定ip地址和端口

          合并成一段

          EndPoint point=new IpEndPoint(IPAddress.parse("IP"),端口号);

           3:利用Listen()方法设置服务器最大连接的客户端的数目

      tcpSocket.Listen(100);//设置服务器能连接的客户端的数量
     

           4:利用accept()方法接受连接服务器的客户端的socket对象,只有接收到了客户端的对象代码才会继续往下执行

     Socket client = tcpSocket.Accept();//等待客户端来连接,将客户端的连接对象存在Client对象中,没有对象连接就一直等待不执行下面代码

           5:利用Send()方法向客户端发送数据,因为设置是以流的形式传输数据,所以数据要转化成二进制字节

                string message = "客户端已近连接服务器端了";
                byte[] date1 = Encoding.UTF8.GetBytes(message);
                client.Send(date1);//把信息从服务器端传到客户端

           6:利用Receive()方法接收从客户端发送过来的数据,接收的数据是二进制的

     
                    byte[] date2 = new byte[1024];//存放二进制的数据
                    int length2 = client.Receive(date2);//接受从客户端发送的二进制数据
                    string str1 = Encoding.UTF8.GetString(date2, 0, length);//将二进制数据转化为字符串

    客户端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TcpSocketClient
    {
        //客户端
        class Program
        {
            static void Main(string[] args)
            {
                Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一个socket对象,用来网络通信
                IPAddress ipAdress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
                EndPoint point = new IPEndPoint(ipAdress, 5566);//配置服务器的IP和端口
                tcpSocket.Connect(point);//把客户端与服务器端建立连接
                string str = "客户端请求与服务器建立连接";
                byte[] ClientDate = Encoding.UTF8.GetBytes(str);//将要发送的数据转化为二进制
                tcpSocket.Send(ClientDate);//向服务器发送二进制数据
                byte[] date = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
                int length = tcpSocket.Receive(date);//接收从服务器端接收的数据
                string message = Encoding.UTF8.GetString(date, 0, length);//将接收到的二进制数据转化为字符串
                Console.WriteLine(message);
                while(true)//循环的从客户端发送数据到服务器端,在接收从服务器端接收的数据
                {
                    string str1 = Console.ReadLine();//写入向服务器端发送的数据
                    byte[] ClientDate1 = Encoding.UTF8.GetBytes(str1);//将要发送的数据转化为二进制
                    tcpSocket.Send(ClientDate1);//向服务器发送二进制数据
                    byte[] date1 = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
                    int length1 = tcpSocket.Receive(date1);//接收从服务器端接收的数据
                    string message1 = Encoding.UTF8.GetString(date1, 0, length1);//将接收到的二进制数据转化为字符串
                    Console.WriteLine("从服务器端接收到的数据为:"+message1);
                }
                Console.ReadKey();
            }
        }
    }
     

     1:声明Socket对象

       Socket tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//建立一个socket对象,用来网络通信

     2:绑定接收端的ip和端口,Socket先用IP找到服务器的地址,再通过端口向服务器传输数据

     IPAddress ipAdress = new IPAddress(new byte[] { 192, 168, 43, 92 });//配置服务器的IP
                EndPoint point = new IPEndPoint(ipAdress, 5566);//配置服务器的IP和端口

     3:利用Connect()方法去连接服务器端

    tcpSocket.Connect(point);//把客户端与服务器端建立连接

     4:利用Send()向服务器端发送数据

    string str1 = Console.ReadLine();//写入向服务器端发送的数据
                    byte[] ClientDate1 = Encoding.UTF8.GetBytes(str1);//将要发送的数据转化为二进制
                    tcpSocket.Send(ClientDate1);//向服务器发送二进制数据

     5:利用Receive()方法接收服务器端的数据

                    byte[] date1 = new byte[1024];//定义一个二进制数组来存放服务器端返回的数据
                    int length1 = tcpSocket.Receive(date1);//接收从服务器端接收的数据
                    string message1 = Encoding.UTF8.GetString(date1, 0, length1);//将接收到的二进制数据转化为字符串
                    Console.WriteLine("从服务器端接收到的数据为:"+message1);

    我们可以使用Tcplistener类来代替socket类实现Tcp通信的服务器端的监听功能

    Tcplistener的命名空间为using System.Net.Sockets

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Sockets;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace tcpClient
    {
        //服务器端
        class Program
        {
            static void Main(string[] args)
            {
                TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.43.92"), 5566));//设置好服务器的Ip和端口号
                listener.Start();//开始监听客户端的连接
                TcpClient client = listener.AcceptTcpClient();//获取连接服务器的客户端,获取到客户端后才执行下面的代码,一个AcceptTcpClient只能允许一个客户端连接
                NetworkStream stream = client.GetStream();//用网络流来传输二进制数据
                byte[] date = new byte[1024];
                int length = stream.Read(date, 0, 1024);//读取网络流中的二进制数据,放入date二进制数组中,从date下标为0开始放,一次放1024个字节,网络流中数据不足1024就按实际情况放
                string str = Encoding.UTF8.GetString(date, 0, date.Length);
                Console.WriteLine(str);//打印出客户端传入的数据
                string str1 = "已连接服务器端";
                byte[] date1 = Encoding.UTF8.GetBytes(str1);
                stream.Write(date1,0,date1.Length);//从服务器端返回数据到客户端
                stream.Close();//关闭网络流
                client.Close();//关闭客户端
                Console.ReadKey();
            }
        }
    }

    1:利用TcpListener对象设置好服务器的ip地址和端口号

    TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("192.168.43.92"), 5566));//设置好服务器的Ip和端口号

    2:TcpListener.start()开始监听客户端的连接

      listener.Start();//开始监听客户端的连接

    3:AcceptTcpClient()方法获取连接服务器的客户端

     TcpClient client = listener.AcceptTcpClient();//获取连接服务器的客户端,获取到客户端后才执行下面的代码,一个AcceptTcpClient只能允许一个客户端连接

    4:利用NetWorkStream网络流来传输数据

      NetworkStream stream = client.GetStream();//用网络流来传输二进制数据

    5:stream.read()从网络流中读取传入的二进制字节

     byte[] date = new byte[1024];
                int length = stream.Read(date, 0, 1024);//读取网络流中的二进制数据,放入date二进制数组中,从date下标为0开始放,一次放1024个字节,网络流中数据不足1024就按实际情况放
                string str = Encoding.UTF8.GetString(date, 0, date.Length);

    6:stream.write()向网络流中写入数据,用read方法去读取写入的二进制字节

                string str1 = "已连接服务器端";
                byte[] date1 = Encoding.UTF8.GetBytes(str1);
                stream.Write(date1,0,date1.Length);//从服务器端返回数据到客户端

    7:stream.close()关闭网络流 client.close()关闭客户端对象

    stream.Close();//关闭网络流
                client.Close();//关闭客户端

    我们可以使用Tcpclient类来代替socket类实现Tcp通信的服务器端的监听功能

     Tcpclient的命名空间为using System.Net.Sockets

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Sockets;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TcpStudy
    {
        class Program
        {
            static void Main(string[] args)
            {
                TcpClient client = new TcpClient("192.168.43.92", 5566);//设置客户端要发送数据到服务器的地址和端口
                NetworkStream stream = client.GetStream();//设置网络流进行数据交换
                string str = "客户端请求连接服务器";//客户端的发送数据
                byte[] date = Encoding.UTF8.GetBytes(str);//转化为二进制
                stream.Write(date, 0, date.Length);//向服务器端发送数据
                byte[] date1 = new byte[1024];
                int length = stream.Read(date1, 0, 1024);
                string str1 = Encoding.UTF8.GetString(date1,0,length);//接收服务器端发送的数据
                Console.WriteLine(str1);
    stream.close();
    Client.close(); Console.ReadKey(); } } }

    1:建立TcpClient对象,绑定数据发送到服务器的地址和端口

    TcpClient client = new TcpClient("192.168.43.92", 5566);//设置客户端要发送数据到服务器的地址和端口

    2:建立网络流传输数据   getStream()

     NetworkStream stream = client.GetStream();//设置网络流进行数据交换

    3:从网络流中读取数据

    byte[] date1 = new byte[1024];
                int length = stream.Read(date1, 0, 1024);

    4:向网络流中发送数据

     string str = "客户端请求连接服务器";//客户端的发送数据
                byte[] date = Encoding.UTF8.GetBytes(str);//转化为二进制
                stream.Write(date, 0, date.Length);//向服务器端发送数据
     

    5:关闭网络流和客户端的连接

    stream.close();
                Client.close();
  • 相关阅读:
    受得了多大的委屈,才做得了多大的事
    黑客常用 Linux 入侵常用命令
    8年软件测试工程师感悟——写给还在迷茫中的朋友
    买or不买?如何测试博彩公司赔率是否合理?
    函数三
    函数二
    函数
    字符编码与文件的操作
    三、元组,字典、集合
    3.20学习内容,字符串与列表
  • 原文地址:https://www.cnblogs.com/zhangyang4674/p/11406407.html
Copyright © 2020-2023  润新知