2015年10月31日星期六

P2V Windows 2000 到ESXI 5.5

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
P2V Windows 2000 到ESXI 5.5  阅读原文»

P2V Windows 2000 到ESXI 5.5

豆子需要处理掉一台旧的Windows 2000服务器,但是还有些程序和数据库在上面运行。迁移数据库以后因为某些版权的问题无法正常运行,没法子,只能整个打包P2V了。

这里有几个前提条件需要完成

1. 直接用最新版本的Vmware Converter 6是无法转换windows 2000了,因为这货实在太老了,最后一个支持的版本是Vmware Covnerter 4.0.1,而且官网上已经不能下载了。豆子在百度云上找了1个小时,终于找到一个能下载的版本。

新版本直接报错!

wKiom1Yyp0aQKUmsAAJ-l6PE0Mo558.jpg

2. Windows 2000 的版本必须是SP4 RollUP 1,不是的话先升级吧

SP4下载

http://www.microsoft.com/en-ca/download/details.aspx?id=4127

Rollup1 下载

http://www.microsoft.com/en-us/download/details.aspx?id=18997

3. 必须在执行操作的服务器上安装sysprep tool。

工具下载

http://technet.microsoft.com/en-us/library/bb742540.aspx

豆子是在一个windows 2008 R2 上操作的,那么下载解压后把 sysprep的程序拷贝到

C:\ProgramData\VMware\VMware vCenter Converter Standalone\sysprep\2k

4. 我们需要用Vmware Converter 4.01把这个windows 2000转换成一个workstation 6.5的镜像,然后再用 5.5版本把他转换都ESXi 5.5上去。

准备就绪之后,开工吧。

4.0.1版本,按部就班操作就行

wKioL1Yyp36wm1BnAAK13xPVB30080.jpg

wKiom1Yyp0mCjdT9AAJ1jVRiXWA916.jpg

wKioL1Yyp4DQgzX-AAFPhKzXMms460.jpg

wKiom1Yyp0ujJOzGAAOTAM4zlNY170.jpg

wKioL1Yyp4PjUym5AAL5NgtTdDM037.jpg

等了2个半小时,总算转换完了。然后换了台电脑,安装5.5的版本,继续转换

wKioL1Yyp4Sj49z4AAIEUj0BmdA087.jpg

wKiom1Yyp0-g-hDuAAHzhOpBISw233.jpg

wKioL1Yyp4eCNyVvAALJJoK3TgM982.jpg

wKiom1Yyp1GQiZhXAAJeqhaY7Do807.jpg

等了3个小时,成功完成,可以看见ESXi 5.5上面已经成功的转换了。

wKioL1YyqhnjjDFCAABgfoejbSI088.jpg

本文出自 "麻婆豆腐" 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1707943

每日博报 精彩不止一点

Android Socket 发送广播包的那些坑  阅读原文»

Android Socket 发送广播包的那些坑

Socket广播包经常被用于局域网内的两台设备之间互相发现和消息传递,在Android应用开发过程中,也经常会遇到这样的需求,例如:两台Android设备之间、Android与手环等智能硬件之间、Android与Windows电脑之间等等。

本文主要介绍在Android中使用Socket开发广播包程序时需要注意的编程事项,以及解决方法。

首先给出一段Android发送广播包的示例代码:

  DatagramSocket socket = new DatagramSocket(8000);  socket.setBroadcast(true);  InetAddress addr = InetAddress.getByName("255.255.255.255");  byte[] buffer = "Hello World".getBytes();  DatagramPacket packet = new DatagramPacket(buffer,buffer.length);  packet.setAddress(addr);  packet.setPort(8086);  socket.send(packet);  

下面分析其中需要注意的地方:

1. 不要在主线程中发送广播包

当然,这个做Android开发的人应该都知道,不能在UI线程中执行任何网络访问相关的操作,由于广播包的发送也属于网络操作,因此必须放到单独的线程中执行。

2. 广播地址不建议使用"255.255.255.255"

上述代码中,广播包的目标地址设置为了"255.255.255.255",其实,这并不是一种推荐的做法。

"255.255.255.255" 是一种受限的广播地址,常用于在计算机不知道自己IP地址的时候发送,比如设备启动时向DHCP服务器索要地址等等,一般情况下,路由器不会转发目标为受限广播地址的广播包。

而且,有些路由器/Wi-Fi热点不支持该广播地址(例如:用Android手机做Wi-Fi热点的时候),因此在程序中会出现"ENETUNREACH (Network is unreachable)"的异常,因此,为了保证程序成功发送广播包,建议使用直接广播地址,例如:当前IP地址是 192.168.1.100,子网掩码是 255.255.255.0 的情况下,广播地址为:192.168.1.255,(具体的推算方法这里就不展开了,可以参考计算机网络相关书籍)。

那么,如何得到本网段的直接广播地址呢,下面是stackoverflow上面有位大牛分享的代码:

  public static InetAddress getBroadcastAddress(Context context) throws UnknownHostException {      WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);      DhcpInfo dhcp = wifi.getDhcpInfo();      if(dhcp==null) {          return InetAddress.getByName("255.255.255.255");      }      int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;      byte[] quads = new byte[4];      for (int k = 0; k < 4; k++)          quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);      return InetAddress.getByAddress(quads);  }  

直接使用该函数即可得到正确的"广播地址",通过setAddress函数设置到DatagramPacket对象中即可。

3. Android设置为Wi-Fi热点时的广播地址

这是个比较大的坑,当Android设备被设置为Wi-Fi热点的时候,上面的函数得到的地址是"0.0.0.0",因此,我们需要探究当Android设备被设置为Wi-Fi热点的时候,它的IP地址究竟是多少?

有人研究了Android底层源码发现,当Android设备被设置为Wi-Fi热点的时候,其IP地址是hardcode写死在源码中的,地址是:"192.168.43.1",对应的广播地址是:"192.168.43.255"

为此,我们需要写个函数来判断一下当前Android手机是否处于Wi-Fi热点模式下,如果是,则应该使用上面给出的这个广播地址,这里给出代码示例:

  protected static Boolean isWifiApEnabled(Context context) {      try {          WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);          Method method = manager.getClass().getMethod("isWifiApEnabled");          return (Boolean)method.invoke(manager);      }      catch (NoSuchMethodException e) {          e.printStackTrace();      }      catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e)  {          e.printStackTrace();  }      return false;  }  

Android SDK并没有开放判断是否处于热点模式的API,因此,我们需要通过反射的方式来得到,另外,注意添加权限:

  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  

4. 小结

本文涉及到的代码被封装到了一个Broadcaster.java的文件中,可以在博文最后的附件中下载,也可以从下面的地址下载:

https://github.com/Jhuster/Android/blob/master/Socket/Broadcaster.java

关于Android Socket发送广播包的那些坑就总结到这里了,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。

本文出自 "对影成三人" 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1707858

文章评论

发表评论

昵称:
登录快速注册
验证码:

点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码

内容:

同时赞一个

每日博报 精彩不止一点关闭

阅读更多内容

没有评论:

发表评论