第22章 网络编程

来源:互联网 发布:爱否商城 知乎 编辑:程序博客网 时间:2024/05/16 02:25

一、System.Net命名空间:对网络进行操作

1、Dns类:检索主机信息

 

代码:

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == string.Empty)
            {
                MessageBox.Show("请输入主机地址!");
            }
            else
            {
                textBox2.Text = string.Empty;
                IPAddress[] ips = Dns.GetHostAddresses(textBox1.Text);  //获取主机IP地址
                foreach (IPAddress ip in ips)
                {
                    textBox2.Text = ip.ToString();
                }

                textBox3.Text = Dns.GetHostName();  //获取本地计算机名

                textBox4.Text = Dns.GetHostByName(Dns.GetHostName()).HostName; //本地的DNS主机名
                //DNS:域名系统 (Domain Name System) 的缩写
               
            }
        }

 

2.IPAddress类:IP网络上的地址

 

代码:

            IPAddress[] ips = Dns.GetHostAddresses(textBox1.Text); //获取IP地址
            foreach (IPAddress ip in ips)
            {
                label2.Text = "网络协议地址:" + ip.Address + "/nIP地址的地址族:" + ip.AddressFamily + "/n是否IPv6链接本地地址:" + ip.IsIPv6LinkLocal;
            }

 

3.IPEndPoint类:连接主机所需的端口号(网络端点)

 

代码:

        private void button1_Click(object sender, EventArgs e)
        {
            IPEndPoint IPEPoint = new IPEndPoint(IPAddress.Parse(textBox1.Text), 80);//实例化网络端点
            label2.Text = "IP地址:" + IPEPoint.Address.ToString() + "/n端口号:" + IPEPoint.Port;
        }

 

4.WebClient类:向网址发送数据,接收数据

 

            WebClient wclient = new WebClient(); //实例化WebClient对象
            wclient.BaseAddress = textBox1.Text; //设置WebClient基于的网址
            wclient.Encoding = Encoding.UTF8;    //指定下载字符串的编码方式
            //为WebClient类对象添加标头
            wclient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            //使用OpenRead方法获取指定网站的数据,并保存到Stream流中
            Stream stream = wclient.OpenRead(textBox1.Text);
            //使用流Stream声明一个流读取变量sreader
            StreamReader sreader = new StreamReader(stream);
            string str = string.Empty;//声明一个变量,用来保存一行从WebCliecnt下载的数据
            //循环读取从指定网站获得的数据
            while ((str = sreader.ReadLine()) != null)
            {
                richTextBox1.Text += str + "/n";
            }
            //调用WebClient对象的DownloadFile方法将指定网站的内容保存到文件中
            wclient.DownloadFile(textBox1.Text, DateTime.Now.ToFileTime() + ".txt");
            MessageBox.Show("保存到文件成功");

 

5.WebRequest类:获取网页请求信息

   WebResponse类:获取网页内容(调用WebRequest对象的GetResponse方法实例化WebResponse对象)

 

 

            richTextBox1.Text = string.Empty;
            //实例化一个WebRequest对象
            WebRequest webrequest = WebRequest.Create(textBox1.Text);
            //设置用于对Internet资源请求进行身份验证的网络凭据
            webrequest.Credentials = CredentialCache.DefaultCredentials;
            //调用WebRequest对象的各种属性获取WebRequest请求的相关信息
            richTextBox1.Text = "请求数据的内容长度:" + webrequest.ContentLength;
            richTextBox1.Text += "/n该请求的协议方法:" + webrequest.Method;
            richTextBox1.Text += "/n访问Internet的网络代理:" + webrequest.Proxy;
            richTextBox1.Text += "/n与该请求关联的Internet URI:" + webrequest.RequestUri;
            richTextBox1.Text += "/n超时时间:" + webrequest.Timeout;
            //调用WebRequest对象的GetResponse方法实例化一个WebResponse对象
            WebResponse webresponse = webrequest.GetResponse();
            //获取WebResponse响应的Internet资源的URI
            richTextBox1.Text += "/n响应该请求的Internet URI:" + webresponse.ResponseUri;
            //调用WebResponse对象的GetResponseStream方法返回数据流
            Stream stream = webresponse.GetResponseStream();
            //使用创建的Stream对象创建一个StreamReader流读取对象
            StreamReader sreader = new StreamReader(stream);
            //读取流中的内容,并显示在RichTextBox控件中
            richTextBox1.Text += "/n" + sreader.ReadToEnd();
            sreader.Close();
            stream.Close();
            webresponse.Close();

 

 

二、System.Net.Sockets命名空间:制作Sockets网络应用程序的相关类

1.Socket类

 

代码:

        private static Socket ConnectSocket(string server, int port)
        {
            Socket socket = null;                    //实例化Socket对象,并初始化为空
            IPHostEntry iphostentry = null;          //实例化IPHostEntry对象(包含了Internet主机的相关信息),并初始化为空
            iphostentry = Dns.GetHostEntry(server);  //获得主机信息
            //循环遍历得到的IP地址列表
            foreach (IPAddress address in iphostentry.AddressList)
            {
                //第一步:使用指定的IP地址和端口号实例化IPEndPoint对象
                IPEndPoint IPEPoint = new IPEndPoint(address, port);
                //第二步:使用Socket的构造函数实例化一个Socket对象,以便用来连接远程主机
                Socket newSocket = new Socket(IPEPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                //IPEPoint.AddressFamily网络协议(IP)地址族,SocketType.Stream 套接的字段流类型,ProtocolType.Tcp传输控制协议Tcp

                newSocket.Connect(IPEPoint);          //调用Connect方法连接远程主机
                if (newSocket.Connected)              //判断远程连接是否连接
                {
                    socket = newSocket;
                    break;
                }
                else
                {
                    continue;
                }
            }
            return socket;
        }


        //获取指定服务器的主页面内容
        private static string SocketSendReceive(string server, int port)
        {
            string request = "GET/HTTP/1.1/n主机:" + server + "/n连接:关闭/n";
            Byte[] btSend = Encoding.ASCII.GetBytes(request); //将一组字符编码为一个字节序列
            Byte[] btReceived = new Byte[256];//定义长度为256的定长字节数组
            //调用自定义方法ConnectSocket,使用指定的服务器名和端口号实例化一个Socket对象
            Socket socket = ConnectSocket(server, port);
            if (socket == null)
                return ("连接失败!");
            //将请求发送到连接的服务器
            socket.Send(btSend, btSend.Length, 0);
            int intContent = 0;
            string strContent = server + "上的默认页面内容:/n";
            do
            {
                //从绑定的Socket接收数据
                intContent = socket.Receive(btReceived, btReceived.Length, 0);
                //btReceived 接收数据的位置,btReceived.Length 要接收的字节数
                //将接收到的数据转换为字符串类型
                strContent += Encoding.ASCII.GetString(btReceived, 0, intContent);
            }
            while (intContent > 0);
            return strContent;
        }


        private void button1_Click(object sender, EventArgs e)
        {
            string server = textBox1.Text;               //指定主机名
            int port = Convert.ToInt32(textBox2.Text);   //指定端口号
            //调用自定义方法SocketSendReceive获取指定主机的主页面内容
            string strContent = SocketSendReceive(server, port);
            MessageBox.Show(strContent);
        }

 

 

2.TcpClient类和TcpListener类

    内容

 

3.UdpClient类

三、System.Net.Mail命名空间

1、MailMessage类:主要用于指定邮件的发送地址,收件人地址,邮件正文和附件

2、Attachment类:邮件附件

3、SmtpClient类:发送邮件

 

示例:

            //注意:测试的时候要关闭本机防火墙;不要使用QQ邮箱
            string file = "邮件测试.txt";
            MailAddress from = new MailAddress("chyenao20@163.com");   //设置邮件发送人
            MailAddress to = new MailAddress("litaoxf123@163.com");     //设置邮件接收人
            MailMessage message = new MailMessage(from,to);        //实例化一个MaileMessage类对象
            message.Subject = "邮件测试";                          //设置发送邮件的主题
            message.Body = "邮件正文";                             //设置发送邮件的内容

            //为要发送的邮件创建附件信息(file为附件文件名)
            Attachment myAttachment = new Attachment(file, System.Net.Mime.MediaTypeNames.Application.Octet);
            //为附件添加时间信息
            System.Net.Mime.ContentDisposition disposition = myAttachment.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(file); //为附件添加邮件创建时间
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(file); //为附件添加邮件修改时间
            disposition.ReadDate = System.IO.File.GetLastAccessTime(file);//为附件添加邮件读取时间
            message.Attachments.Add(myAttachment);             //将创建的附件添加到邮件中

            //实例化SmtpClient邮件发送类对象(smtp.163.com为SMTP服务器)
            SmtpClient client = new SmtpClient("smtp.163.com", 25);
            //设置用于验证发件人身份的凭据(发件人的账号,密码)
            client.Credentials = new System.Net.NetworkCredential("chyenao20@163.com", "lt******");
            //发送邮件
            client.Send(message);
            MessageBox.Show("发送成功");

 

 

实践:

1。创建WEB页面浏览器

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                Uri address = new Uri(textBox1.Text);
                webBrowser1.Url = address;   //webBrowser控件
            }
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)   //判断是否按下Enter键
            {
                if (textBox1.Text != "")
                {
                    button1_Click(sender, e);
                }
            }
        }

 

2。设计点对点聊天程序

3。电子邮件的发送和接收