从零开始学Socket:(三)服务端和客户端简单通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15020543/article/details/84027117

连接上服务端和客户端之后,我们就要让他们互动起来了。(到了现在,大家如果对下面代码不懂得地方可以去F12跟踪至源码界面查看,学习就是这样

先在服务端编写发送函数和接收函数

        /// <summary>
        /// 发送数据到客户端
        /// </summary>
        /// <param name="toClientsocket">用以连接客户端的Socket</param>
        /// <param name="msg">要传递的数据</param>
        static void SendMessagesToClient(Socket toClientsocket,string msg)
        {
            //只能传递byte数组
            byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
            toClientsocket.Send(data);
        }
        /// <summary>
        /// 接收来自客户端的数据
        /// </summary>
        /// <param name="toClientsocket">用以连接客户端的Socket</param>
        static void ReceiveMessages(Socket toClientsocket)
        {
            byte[] data = new byte[1024];
            int count = toClientsocket.Receive(data);
            string msg = Encoding.UTF8.GetString(data, 0, count);
            Console.WriteLine("{0} {1}", "收到来自客户端的消息:", msg);
        }

然后在客户端编写接收和发送信息的函数

        /// <summary>
        /// 接收来自服务端的消息
        /// </summary>
        static void ReceiveMessages()
        {
            byte[] data = new byte[1024];
            int count = clientSocket.Receive(data);
            string msg = Encoding.UTF8.GetString(data, 0, count);
            Console.WriteLine("{0} {1}", "收到来自服务器的消息:", msg);
        }
        /// <summary>
        /// 发送信息到服务端
        /// </summary>
        /// <param name="msg">要发送的信息</param>
        static void SendMessagetoServer(string msg)
        {
            //将字符串转为byte数组
            byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
            //发送到服务器
            clientSocket.Send(data);
        }

服务端代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace Server
{
    class Program
    {
        static Socket serverSocket;
        static void Main(string[] args)
        {
            StartServer();
            //暂停
            Console.ReadKey();
        }
        /// <summary>
        /// 开启一个Socket
        /// </summary>
        static void StartServer()
        {
            //实例化一个Socket
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //设置IP
            IPAddress ipAdress = IPAddress.Parse("127.0.0.1");

            //设置网络终结点
            IPEndPoint iPEndPoint = new IPEndPoint(ipAdress, 88);

            //绑定ip和端口号
            serverSocket.Bind(iPEndPoint);

            //等待队列(开始监听端口号)
            serverSocket.Listen(0);

            //异步接受客户端连接
            serverSocket.BeginAccept(AcceptCallBack, serverSocket);

        }

        /// <summary>
        /// 发送数据到客户端
        /// </summary>
        /// <param name="toClientsocket">用以连接客户端的Socket</param>
        /// <param name="msg">要传递的数据</param>
        static void SendMessagesToClient(Socket toClientsocket,string msg)
        {
            //只能传递byte数组
            byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
            toClientsocket.Send(data);
        }

        /// <summary>
        /// 接收来自客户端的数据
        /// </summary>
        /// <param name="toClientsocket"></param>
        static void ReceiveMessages(Socket toClientsocket)
        {
            byte[] data = new byte[1024];
            int count = toClientsocket.Receive(data);
            string msg = Encoding.UTF8.GetString(data, 0, count);
            Console.WriteLine("{0} {1}", "收到来自客户端的消息:", msg);
        }

        /// <summary>
        /// 当客户端连接到服务器时执行的回调函数
        /// </summary>
        /// <param name="ar"></param>
        static void AcceptCallBack(IAsyncResult ar)
        {
            Console.WriteLine("一个客户端连接进来了。");
            //这里获取到的是向客户端收发消息的Socket
            Socket toClientsocket = serverSocket.EndAccept(ar);
            //要向客户端发送的消息    
            string msg = "Hello client!你好。";
            //发送消息
            SendMessagesToClient(toClientsocket, msg);
            //接收客户端传来的消息
            ReceiveMessages(toClientsocket);
        }



    }
}

客户端代码

using System;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace ClientTest
{
    class Program
    {
        //声明客户端
        static Socket clientSocket;
        static void Main(string[] args)
        {
            StartClient();
            ReceiveMessages();
            SendMessagetoServer("Hello Server!你好。");
            Console.ReadKey();
        }
        /// <summary>
        /// 开启客户端并连接到服务器端
        /// </summary>
        static void StartClient()
        {
            clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 88));
        }
        /// <summary>
        /// 接收来自服务端的消息
        /// </summary>
        static void ReceiveMessages()
        {
            byte[] data = new byte[1024];
            int count = clientSocket.Receive(data);
            string msg = Encoding.UTF8.GetString(data, 0, count);
            Console.WriteLine("{0} {1}", "收到来自服务器的消息:", msg);
        }
        /// <summary>
        /// 发送信息到服务端
        /// </summary>
        /// <param name="msg">要发送的信息</param>
        static void SendMessagetoServer(string msg)
        {
            //将字符串转为byte数组
            byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
            //发送到服务器
            clientSocket.Send(data);
        }
    }
}

运行结果

猜你喜欢

转载自blog.csdn.net/qq_15020543/article/details/84027117