zoukankan      html  css  js  c++  java
  • c#Socket通信

    网络通信的基本知识:

    首先应该确定IP地址和端口号,端口号为了确定计算机的哪个进程,比如同一主机是微信还是qq通信

    要进行通信首先应该确定一种协议,通常用TCP可靠和UDP不可靠协议,当然带来的速度也会不同,多数游戏中采用TCP协议。

    面向连接套接字通信步骤:

    服务端:

    先申请一个Socket,绑定一个IP地址和端口,开始接听,等待接受连接。

    客户端:

    申请一个Socket,连接服务器且指定IP和端口号

    值得注意的是,服务端有两个Socket,一个用于监听,另一个和客户端进行通信。

    服务器端代码:

    using System.Net.Sockets;
    using System.Net;
    using System.Threading;
    
    namespace Socket套接字
    {
        class SocketT
        {
            private Socket _ServerSocket;                       //服务器监听套接字
            private bool _IsListionContect;                     //是否在监听
    
            public SocketT()
            {
                //定义网络终节点(封装IP和端口)
                IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),1000);
                //实例化套接字
                _ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //服务端绑定地址
                _ServerSocket.Bind(endPoint);
    
                //开始监听
                _ServerSocket.Listen(10);                       //监听的最大长度
                Console.WriteLine("服务器已经启动...");
    
                try
                {
                    while (_IsListionContect)
                    {
                        //Accept()方法接受客户端的连接,这个方法会阻断当前线程的运行
                        Socket sockMsgSever = _ServerSocket.Accept();
                        Console.WriteLine("有一个客户端连接...");
    
                        //开启后台线程,进行客户端会话
                        Thread thClientMsg = new Thread(ClientMsg);
                        thClientMsg.IsBackground=true;          //设置为后台线程
                        thClientMsg.Name = "thClientMsg";
                        thClientMsg.Start(sockMsgSever);
    
                    }
    
                }
                catch (Exception)
                {
                    
                    throw;
                }
            }
    
            /// <summary>
            /// 服务器端和客户端通信的后天线程
            /// </summary>
            /// <param name="?"></param>
            private void ClientMsg(object sokMsg)
            {
                Socket socketMsg = sokMsg as Socket; //将object类型转换为Socket通信
    
                while (true)
                {
                    //准备一个数据缓存
                    byte[] msyArray = new byte[0124 * 0124];
                    //接受客户端发来的请求,返回真实的数据长度
                    int TrueClientMsgLenth = socketMsg.Receive(msyArray);
                    //byte数组转字符串
                    string strMsg = Encoding.UTF8.GetString(msyArray, 0, TrueClientMsgLenth);
                    //显示客户端数据
                    Console.WriteLine("客户端数据:"+strMsg);
                }
            }
    
    
            static void Main(string[] args)
            {
                SocketT obj = new SocketT();
            }
        }
    }

     客户端:

    using System.Threading;
    using System.Net;
    using System.Net.Sockets;
    
    namespace Socket套接字_客户端
    {
        class Client
        {
            private Socket _ClientSocket;                       //客户端通讯套接字
            private IPEndPoint SeverEndPoint;                   //连接到服务器端IP和端口
    
            public Client()
            {
                //服务器通信地址
                SeverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1000);
                //建立客户端Socket
                _ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                try
                {
                    _ClientSocket.Connect(SeverEndPoint);
                }
                catch (Exception)
                {
                }
                Console.WriteLine("连接服务器端成功!");
            }
    
            //连接服务器
            public void SendMsg()
            {
                while (true)
                {
                    //输入信息
                    string strMsg = Console.ReadLine();
                    //退出
                    if (strMsg == "exit")
                    {
                        break;
                    }
    
                    //字节转换
                    Byte[] byeArray = Encoding.UTF8.GetBytes(strMsg);
                    //发送数据
                    _ClientSocket.Send(byeArray);
                    Console.WriteLine("我:" + strMsg);
                }
                //关闭连接
                _ClientSocket.Shutdown(SocketShutdown.Both);
                //清理连接资源
                _ClientSocket.Close();
            }
    
            static void Main(string[] args)
            {
                Client obj = new Client();
                obj.SendMsg();
            }
        }
    }
  • 相关阅读:
    vue.js 源代码学习笔记 ----- html-parse.js
    vue.js 源代码学习笔记 ----- text-parse.js
    vue.js 源代码学习笔记 ----- keep-alives
    一些图片剪切组件.
    好听的粤语歌..
    jQuery框架Ajax常用选项
    form自动提交
    .NET EF 框架-实现增删改查
    简单抓取小程序大全,并展示
    C#关于调用微信接口的代码
  • 原文地址:https://www.cnblogs.com/Optimism/p/10512903.html
Copyright © 2011-2022 走看看