WinForm-WebClient 类的公共方法

从MSDN的定义看 :WebClient类提供向任何URI标识的本地、Intranet(内网)、Internet 资源发送数据和接收数据的公共方法。

我们将从一个比较长的实例来认识WebClient的用法。程序100多行,且没注释。但后续会添加上去的。

本实例是通过对Ip138 以及 taobao 提供的API进行调用,从而获得外网ip以及ip归属地的方法。

首先是用到的三个函数:

 1 ///获得外网IP地址,由于学校是在局域网。所以比较麻烦
 2 private static string GetIPAddress()
 3 {
 4     string tempip = "";
 5     try
 6         {
 7              WebRequest wr = WebRequest.Create("http://www.ip138.com/ip2city.asp");
 8                 Stream s = wr.GetResponse().GetResponseStream();
 9                 StreamReader sr = new StreamReader(s, Encoding.Default);
10                 string all = sr.ReadToEnd(); //读取网站的数据
11
12                 int start = all.IndexOf("[") + 1;
13                 int end = all.IndexOf("]", start);
14                 tempip = all.Substring(start, end - start);
15                 sr.Close();
16                 s.Close();
17     }
18     catch
19     {
20     }
21     return tempip;
22 }
 1 ///根据获得的外网IP 从而获得IP归属地信息
 2 public void ThreadProc(string ip)
 3         {
 4             if (!IsVaildIPAddress(ip))
 5             {
 6                 MessageBox.Show("Illegal", "Error", MessageBoxButtons.OK,
 7         MessageBoxIcon.Error);
 8             }
 9             WebClient client = new WebClient();
10             string uri = @"http://ip.taobao.com/service/getIpInfo.php?ip=" + ip;
11             string jsonData = client.DownloadString(uri);         //下面语句需要引用Json.dll
12             IPCheckResult result = JsonConvert.DeserializeObject<IPCheckResult>
13         (jsonData);
14             if (result.code != 0)
15             {
16                 MessageBox.Show("Not Found");
17             }
18             textBox1.Text = result.data.Region;
19             textBox2.Text = result.data.City;
20             textBox3.Text = result.data.Country + result.data.ISP;
21             textBox4.Text = result.data.Area + "地区";
22         }
///用正则表达式 验证IP
private bool IsVaildIPAddress(string ip)
        {
            string pattern = @"^((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))$";
            return Regex.IsMatch(ip, pattern);
        }
///Form_Load事件调用1  private void Form1_Load(object sender, EventArgs e)
2         {
3             string ip = GetIPAddress();
4             Thread thread = new Thread(() => ThreadProc(ip));        //始终觉得 Lamda表达式是线程调用有参数的函数的好办法。。。。
5             thread.Start();
6         }

最后是用到的两个自定义类:

 1 namespace IPAddress
 2 {
 3     class IPAddressData
 4     {
 5         public string Country;//获取IP所在城市
 6         public string Area;//获取IP所在地区
 7         public string Region;//获取IP所在省
 8         public string City;//获取IP所在市
 9         public string ISP;//获取IP所属运营商
10         public IPAddressData()
11         { }
12     }
13 }
1 namespace IPAddress
2 {
3     class IPCheckResult
4     {
5         public int code;
6         public IPAddressData data;
7     }
8 }

程序结果:

至于程序跑起来遇到的从不是创建控件的线程访问控件,看官们 百度一下就行。有几种解决方法。(●‘?‘●)

时间: 2024-07-29 13:59:54

WinForm-WebClient 类的公共方法的相关文章

WinForm BaseClass类常用通用方法

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using System.Security.Cryptography; 7 8 namespace HRPOWER.BLL 9 { 10 /// <summary> 11 /// 业务逻辑层基类 12 /// </summary> 13 public

抽象公共类,复用公共方法为多个对象

今天学习如何实现愤怒的小鸟,用到了JBox2D构建物理世界(这个不是这篇文章重点,但是很谢谢这个开源玩意) 一般一个独立的物体的实体类 import org.jbox2d.dynamics.Body; import org.liky.angrybird.util.Globals; import org.liky.angrybird.util.ImageUtils; import android.graphics.Canvas; import android.graphics.Paint; imp

struts2中取得session的公共方法类

该公共方法类一般建立在com.xxx.util包下面 package com.dgh.util; import java.util.Map; import org.apache.struts2.interceptor.SessionAware; /** * * 获得session * @author wangcunhuazi */ public class BaseAction implements SessionAware { protected Map<String,Object> ses

WebClient类

WebClient类提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法. 其实就相当于创建一个请求客户端.可以获取网页和各种各样的信息,包括交互. 通过MSDN来看看WebClient类提供的功能. 一.属性 1.BaseAddress 获取或设置 WebClient 发出请求的基 URI. 2.CachePolicy 对于此 WebClient 实例使用 WebRequest 对象获得的任何资源,获取或设置应用程序的缓存策略. 3.CanRaiseEvents 获取一

oneThink公共方法

1. 常用公共方法 1 <?php 2 // +---------------------------------------------------------------------- 3 // | OneThink [ WE CAN DO IT JUST THINK IT ] 4 // +---------------------------------------------------------------------- 5 // | Copyright (c) 2013 http:

切点表达式定义了拦截类中所有方法,所以每个方法都被增强

1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为"切面"(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性. 2.DI 和 IOC 概念 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作

面向对象:封装(一):构造函数;类的主方法;权限修饰符;对象的创建

对象:一切皆为对象. 对象包括两部分内容:属性(名词形容词),行为(动词). 对象和对象之间是有关系的. 派生(子类与父类的关系),关联,依赖. 类:对同一类别的众多对象的一种抽象. 类,还是用来生成对象的一种模板,对象是类的一种具体化的表现. 面向对象的三大特性:封装,继承,多态. 一:类的定义: class 类名{ 访问修饰符 成员变量的定义; 访问修饰符 成员函数(方法)的定义; } 例1: public class Student{ public String name; public

单元测试时候使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且应采用一个TestContext类型的参数报错的解决办法

using Microsoft.VisualStudio.TestTools.UnitTesting; 如果该DLL应用的是 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 版本为9.0.0.0 的话,则使用[ClassInitialize]会该方法必须是静态的公共方法,不返回值并且

使用C#WebClient类访问(上传/下载/删除/列出文件目录)由IIS搭建的http文件服务器

前言 为什么要写这边博文呢?其实,就是使用C#WebClient类访问由IIS搭建的http文件服务器的问题花了我足足两天的时间,因此,有必要写下自己所学到的,同时,也能让广大的博友学习学习一下. 本文足如有不足之处,请在下方留言提出,我会进行改正的,谢谢! 搭建IIS文件服务器 本博文使用的操作系统为Windows 10 企业版,其他Windows系统类似,请借鉴: 一.当然,开始肯定没有IIS,那该怎么办?需要一个软件环境进行搭建,具体方法如下: 1)打开“控制面板”,找到“程序与功能”,如