C# Socket发送请求及监听

本文介绍如何在Socket通信中使用MD5加密技术进行数据安全传输,包括数据加密、长度计算、信息头构建和接收服务端响应的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketTest
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        /// 
        [STAThread]
        static void Main ()
        {
            // string sendMsg = "hello word !";//需要发送的数据
             MD5 md5 = new MD5CryptoServiceProvider ();
            byte[] data = System.Text.Encoding.UTF8.GetBytes (sendMsg);
            byte[] result = md5.ComputeHash (data);  //md5加密数据
            String strReturn = String.Empty;
            for (int i = 0; i < result.Length; i++)
                strReturn += result[i].ToString ("x").PadLeft (2,'0');
            sendMsg = sendMsg + "|" + strReturn;
            Console.WriteLine ("发送的内容:" + sendMsg);
            int len = Encoding.UTF8.GetByteCount (sendMsg);
            string sLen = ("" + len).PadLeft (4,'0');
            //将长度插入信息头中
            sendMsg = sLen + sendMsg;
            Console.WriteLine (sendMsg);
            string ipadd = "127.0.0.1";//设置自己连接的IP地址
            IPEndPoint ie = new IPEndPoint (IPAddress.Parse (ipadd),8080); // 服务器的IP和端口
            Socket server = new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            server.Connect (ie);
            server.Send (Encoding.Default.GetBytes (sendMsg));
             byte[] buffer = new byte[1024 * 1024];
             int n = server.Receive (buffer);//socket是连接服务器的
             //读取服务端发来的消息
             string msg = Encoding.UTF8.GetString (buffer,0,n);
             Console.WriteLine ("请求返回信息:" + msg);
            server.Close ();
            startListening ();
            destory ();
           
        }


        /*
         *  1、打开服务端端口
         *  2、开始监听客户端Socket连接,并获取客户端Socket
         *  3、将客户端Socket保存到Hashtable中,并处理客服端Socket发送的数据
         */

        private static TcpListener listener = null;
        private static void startListening ()
        {
            //打开服务端端口
            IPAddress lip = IPAddress.Parse ("127.0.0.1");
            listener = new TcpListener (lip,12345);
            listener.Start ();
            while (true)
            {
                Socket socket = null;
                try
                {
                    //开始监听客户端Socket
                    socket = listener.AcceptSocket ();
                   // string clientIP = ((IPEndPoint)socket.RemoteEndPoint).Address.ToString ();
                   // string serverIP = ((IPEndPoint)socket.LocalEndPoint).Address.ToString ();
                    //检查是否是局域网访问,若不是是局域网访问则终止。
                 
                        socket.SendTimeout = 30 * 1000;
                        //生成客服端Socket处理数据,并将客户端Socket保存到Hashtable中
                        //获取信息头,信息体长度
                        Byte[] buf_len = new Byte[4];
                        socket.Receive (buf_len);
                        string str_len = UTF8Encoding.UTF8.GetString (buf_len);
                        int len = Int32.Parse (str_len);
                        //根据信息头长度,获取信息体内容
                        Byte[] buffer = new Byte[len];
                        socket.Receive (buffer);
                        string msg = UTF8Encoding.UTF8.GetString (buffer);
                        Console.WriteLine ("回调地址接受信息=="+msg);
                        if (socket != null)
                        {
                            socket.Close ();
                            socket = null;
                        }
                }
                catch (Exception e)
                {
                    Console.WriteLine (e.ToString ());
                }
            }
        }

        /*
         * 销毁监听线程
         */
        public static void destory ()
        {
            if (listener != null)
            {
                listener.Stop ();
                listener = null;
            }
         
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值