C#Socket通讯步骤小结

server端:
1、新建serversocket
2、给serversocket绑定ip和端口Bind
3、侦听serversocket.Listen
4、获取clientsocket=serversocket.Accept
5、发送消息clientsocket.Send
6、接收消息clientsocket.Receive
client端:
1、新建clientsocket
2、连接server,clientsocket.connect
3、发送消息clientsocket.send
4、接收消息clientsocket.Receive

代码:

server端:

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

namespace SocketTestServer
{
    class Server
    {
        /// <summary>
        /// 服务器套接字
        /// </summary>
        private static Socket _serverSocket;
        /// <summary>
        /// 服务器IP地址
        /// </summary>
        private static IPAddress _ip ;
        private static Socket _clientSocket;
        private static byte[] _receiveMessage = new byte[1024];
        static void Main(string[] args)
        {
            //将字符串转换为IP地址
            _ip=IPAddress.Parse("10.0.12.17");
            //创建服务器套接字
            _serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //给套接字绑定IP地址和端口号
            _serverSocket.Bind(new IPEndPoint(_ip,8888));
            _serverSocket.Listen(5);//最多挂起5个客户端套接字连接
            Console.Write("成功启动监听{0}\n",_serverSocket.LocalEndPoint);
            //获取连接的客户端套接字
            _clientSocket = _serverSocket.Accept();
            SendMessage();
            //必须一直接收消息,否则只会接收一条消息;Receive与Listen对应,限制侦听的套接字
            while (true)
            {
            GetMessage();
            }
        }

        private static void SendMessage()
        {
            _clientSocket.Send(Encoding.ASCII.GetBytes("Hello client!\n"));
            Console.Write("向客户端发送消息:Hello client!\n\n");
        }

        private static void GetMessage()
        {
            int bytenumber = _clientSocket.Receive(_receiveMessage);
            try
            {
                Console.Write("接收客户端{0}消息:\n{1}", _clientSocket.RemoteEndPoint, Encoding.ASCII.GetString(_receiveMessage,0, bytenumber));
            }
            catch (Exception e)
            {
                Console.Write(e.Message);
                _clientSocket.Shutdown(SocketShutdown.Both);
                _clientSocket.Close();
            }
        }
    }
}

Client端:

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

namespace SocketTestClient
{
    class Client
    {
        private static byte[] _receiveMessage = new byte[1024];
        static void Main(string[] args)
        {
            Socket clientSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            try
            {
                clientSocket.Connect("10.0.12.17", 8888);
                Console.Write("连接服务器成功\n");
            }
            catch
            {
                Console.Write("连接服务器失败\n");
                return;
            }

            int byteNumber =  clientSocket.Receive(_receiveMessage);
            //必须发送正确的字节数,否则会发送很多空字节
            Console.Write("接收服务器消息:{0}\n",Encoding.ASCII.GetString(_receiveMessage,0, byteNumber));
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    string message = "Hello server!The time is:" + DateTime.Now + "\n";//不能正确发送中文
                    clientSocket.Send(Encoding.ASCII.GetBytes(message));
                    Console.Write("向服务器发送消息:{0}", message);
                    Thread.Sleep(1000);
                }
                catch
                {
                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                    Console.Write("发送失败,按回车键退出");
                    break;
                }
            }
            Console.Write("发送完毕,按回车键退出");
            Console.Read();
        }
    }
}

参考:


猜你喜欢

转载自blog.csdn.net/syb1295306116/article/details/80537015