转载 -- 基于Socket实现简单服务端和客户端


public
class TCPServer { Dictionary<string, Socket> clientSockets = new Dictionary<string, Socket>(); Socket socketwatch = null; public void StartListen() { socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress address = IPAddress.Parse("127.0.0.1"); IPEndPoint point = new IPEndPoint(address, 8098); socketwatch.Bind(point); socketwatch.Listen(20); Thread threadwatch = new Thread(watchconnecting); threadwatch.IsBackground = true; threadwatch.Start(); } void watchconnecting() { Socket connection = null; while (true) { try { connection = socketwatch.Accept(); } catch (Exception ex) { Console.WriteLine(ex.Message); break; } IPAddress clientIP = (connection.RemoteEndPoint as IPEndPoint).Address; int clientPort = (connection.RemoteEndPoint as IPEndPoint).Port; string sendmsg = "连接服务端成功!\r\n" + "本地IP:" + clientIP + ",本地端口" + clientPort.ToString(); byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendmsg); connection.Send(arrSendMsg); string remoteEndPoint = connection.RemoteEndPoint.ToString(); Console.WriteLine("成功与" + remoteEndPoint + "客户端建立连接!\t\n"); clientSockets.Add(remoteEndPoint, connection); Thread thread = new Thread(recv); thread.IsBackground = true; thread.Start(connection); } } void recv(object socketclientpara) { Socket socketServer = socketclientpara as Socket; while (true) { byte[] arrServerRecMsg = new byte[1024 * 1024]; try { int length = socketServer.Receive(arrServerRecMsg); string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length); Console.WriteLine("客户端:" + socketServer.RemoteEndPoint + ",time:" + GetCurrentTime() + "\r\n" + strSRecMsg + "\r\n\n"); socketServer.Send(Encoding.UTF8.GetBytes("测试server 是否可以发送数据给client ")); } catch(Exception ex) { clientSockets.Remove(socketServer.RemoteEndPoint.ToString()); Console.WriteLine("Client Count:" + clientSockets.Count); Console.WriteLine("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n"); socketServer.Close(); break; } } } string GetCurrentTime() { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } }


public class TCPClient
    {
        Socket socketclient = null;

        public void StartConnection()
        {
            socketclient=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress address = IPAddress.Parse("127.0.0.1");
            IPEndPoint point = new IPEndPoint(address, 8098);

            try
            {
                socketclient.Connect(point);
            }
            catch (Exception ex)
            {
                Console.WriteLine("连接失败\r\n");
                return;
            }

            Thread threadclient = new Thread(recv);
            threadclient.IsBackground = true;
            threadclient.Start();
        }

        void recv()
        {
            int x = 0;
            while (true)
            {
                try
                {
                    byte[] arrRecvmsg = new byte[1024 * 1024];
                    int length = socketclient.Receive(arrRecvmsg);
                    string strRevMsg = Encoding.UTF8.GetString(arrRecvmsg, 0, length);
                    if (x == 1)
                    {
                        Console.WriteLine("服务器:" + GetCurrentTime() + "\r\n" + strRevMsg + "\r\n\n");
                    }
                    else
                    {
                        Console.WriteLine(strRevMsg + "\r\n\n");
                        x = 1;
                    }

                }
                catch(Exception ex)
                {
                    Console.WriteLine("远程服务器已经中断连接" + "\r\n");
                    break;
                }
            }
        }

        void ClientSendMsg(string sendMsg)
        {
            byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(sendMsg);
            socketclient.Send(arrClientSendMsg);
            Console.WriteLine("hello...." + ": " + GetCurrentTime() + "\r\n" + sendMsg + "\r\n\n");
        }

        string GetCurrentTime()
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }
    }


转自--- C#使用Socket实现一个socket服务器与多个socket客户端通信 - cctext - 博客园 (cnblogs.com)

 

posted @ 2021-11-23 10:04  追风少年2021  阅读(60)  评论(0)    收藏  举报