• C#(99):TcpListerner、TcpClient 、邮件发送MailMessage、SmtpClient类


    一、服务端

        TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000);//定义监听器
        server.Start();//启动监听器
        byte[] buffer = new byte[1024]; //创建一个容器用于接受数据
        string data = null;
        while (true)
        {
            //等待客户端连接过来
            TcpClient client = server.AcceptTcpClient();
    
            //Task<TcpClient> task1 = server.AcceptTcpClientAsync();
            //Socket socket = server.AcceptSocket();
            //Task<Socket> task2 = server.AcceptSocketAsync();
            //server.Pending();
    
            //取得客户端发送过来的数据 
            int len = client.Available;//获取已经从网络流接收且可供读取的数据量
            NetworkStream nstream = client.GetStream(); //返回一个可供读写的网络流
            int bytesRead;
            do
            {
                bytesRead = nstream.Read(buffer, 0, buffer.Length); //接收消息
                data = Encoding.UTF8.GetString(buffer, 0, bytesRead); //先将接收到的数据转化可输出的字符串类型
                Console.WriteLine("收到消息:" + data); 输出收到的信息
                byte[] msg = Encoding.UTF8.GetBytes(data.ToUpper());
                nstream.Write(buffer, 0, buffer.Length);//发送消息
            } while (bytesRead > 0);
            nstream.Close(); //1.先释放流的数据
            client.Close(); //2.再释放客户端的连接数据
        }
        server.Stop(); //3.关闭监听

    二、客户端

        TcpClient client = new TcpClient("127.0.0.1", 13000);//连接服务器
                                                             //或者
                                                             //    TcpClient client=new TcpClient();
                                                             //    client.Connect("127.0.0.1", 13000);
        NetworkStream nstream = client.GetStream();
        //---其他同服务端
        nstream.Close(); //1.先释放流的数据
        client.Close(); //2.再释放客户端的连接数据

    三、发送邮件

    1、使用MailMessage和SmtpClient发送邮件。

    在Wince中,可以使用OpenNetCF.Net.Mail类发送邮件。

        MailMessage mailMessage = new MailMessage
        {
            //发件人
            From = new MailAddress("***@163.com", "您的朋友", Encoding.UTF8),
            Priority = MailPriority.High,
            //邮件主题
            SubjectEncoding = Encoding.UTF8,
            Subject = "Hello",
        };
    
        //收件人 可以添加多个收件人
        mailMessage.To.Add(new MailAddress("137***126@qq.com"));
    
        //mailMessage.CC 获取包含此电子邮件的抄送(CC)收件人的地址集合
    
        //邮件正文            
        mailMessage.IsBodyHtml = true;//如果要发送html格式的消息,需要设置这个属性
        mailMessage.BodyEncoding = Encoding.UTF8;
        mailMessage.Body = "<p style='color:red;font-size:14px;'>邮件测试</p>";
    
        //邮件内容即消息正文中中显示图片 ,需要为图片指明src='cid:idname(资源id)'
        AlternateView htmlBody = AlternateView.CreateAlternateViewFromString("<img src='cid:zfp'/>", null, "text/html");
        //然后在LinkedResource加入文件的绝对地址,和ContentType 例如image/gif,text/html...与http请求的响应报文中的ContentType一致
        LinkedResource lr = new LinkedResource("1.gif", "image/gif");
        //绑定上文中指定的idname
        lr.ContentId = "zfp";
        //添加链接资源
        htmlBody.LinkedResources.Add(lr);
        mailMessage.AlternateViews.Add(htmlBody);
    
        //发送附件 指明附件的绝对地址
        Attachment attachment = new Attachment("1.txt");
        mailMessage.Attachments.Add(attachment);
    
        //创建邮件发送客户端
        SmtpClient sendClient = new SmtpClient("smtp.qq.com", 25)
        {
            //指定邮箱账号和密码
            Credentials = new NetworkCredential(fromMail, "xmxyldrmtvnrddfe")
        };
    
        //指定如何发送电子邮件
        sendClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    
        //指定使用使用安全套接字ssl加密的链接
        sendClient.EnableSsl = true;
        sendClient.Send(mailMessage);
        //或者可以一步发送
        sendClient.SendAsync(mailMessage, null);

     2、利用TcpClient类收取pop3邮件 

        TcpClient client = new TcpClient("mail.**.com", 443);
    
        //连接
        NetworkStream ns = client.GetStream();
        StreamReader sr = new StreamReader(ns, Encoding.Default);
        string result = sr.ReadLine(); //返回OK或ER
    
        //登陆
        StreamWriter sw = new StreamWriter(ns);
        sw.WriteLine("user  b**");
        sw.Flush();
        result = sr.ReadLine();
    
        sw.WriteLine("pass  **");
        sw.Flush();
        result = sr.ReadLine();
        //获取邮件数量
        sw.WriteLine("stat");
        sw.Flush();
        result = sr.ReadLine();//result.split(' ')[1]表示邮件数量
    
        //获取邮件信息
        sw.WriteLine("top 1 0 ");
        sw.Flush();
        result = sr.ReadLine();
        while (true)
        {
            result = sr.ReadLine();
            if (result == ".") break;
            if (result.Length > 4 && result.Substring(0, 8) == "Subject:")
            {
                //result为标题,乱码用Base64解码
                Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(result));
            }
        }
  • 相关阅读:
    上下文的哲学思考:上下文=环境 & 上下文=对象+行为+环境
    程序的上下文
    keyword:react native bridge
    深入理解react-native
    Xamarin vs React Native vs Ionic vs NativeScript: Cross-platform Mobile Frameworks Comparison
    脱离 WebView 的通信 JavaScriptCore
    v8引擎详解(摘)-- V8引擎是一个JavaScript引擎实现
    js、jscore与webkit、nodejs的关系
    JavaScriptCore在浏览器引擎中的位置
    正在开发的JavaScript引擎有哪些?
  • 原文地址:https://www.cnblogs.com/springsnow/p/9433990.html
Copyright © 2020-2023  润新知