只要敢卖 就有人敢买

mikel阅读(1081)

说好的脸面问题在互联网上基本上等于零,因为没人知道一个ID后面是个人还是条狗,所以说大家还在互联网上讲脸面就有点儿可笑了。

所以说很多人总是放不下脸面来,将自己的卖出去,结果就一直苦逼的徘徊在屌丝和草根儿之间,永远成不了互联网上能挣钱的那拨儿人。互联网上能赚钱的都是能咋呼的,其实很多赚大钱的开始能咋呼,后来就低调做人,闷头赚钱去了,那就另一个境界了,但是最初没人知道你的时候,你就只能咋呼,包装自己,出来卖自己。

那么多人在互联网上淘金,又推出了互联网+的概念,可有几个人知道你,所以大胆的出来卖吧!

再说到商品,互联网上什么都可以当初商品来卖,别人不知道的你知道的信息就可以卖个好价钱,什么图片、视频、教程、mp3、账号类的等等所以虚拟的资源都可以拿出来卖,甚至你的一篇经验技巧的文章都有人愿意出钱买,因为这些人需要所以买。

不过在卖之前一定要做好包装,人靠衣裳马靠鞍,没有好的形象和包装的商品让人提不起购买的欲望,尽管你的商品绝对货真价实,互联网上卖东西不再是包子不在褶儿上的方式了,没人有时间去探究深层次的东西,都是买的表面的介绍。

 

Android udp 广播发送和接收 - the_Gaven - 博客园

mikel阅读(1172)

来源: Android udp 广播发送和接收 – the_Gaven – 博客园

Android udp 广播发送和接收

最近在和同学开发一款app,作为课程大作业。其中,涉及到udp socket (多播) 的发送和接收、tcp socket 的发送和接收。作为一个Java的门外汉,在简单地看了一些理论地资料之后,实际编程中遇到了不少问题。然后,又在网上大搜这方面的博客,找来找去,其实 大家写的东西基本都一样,因为规则已经订好了。网上的代码不全,又有一些错漏,让我走了很多弯路,无数次推倒代码重写,Debug,终于调出了一个实际可 运行的版本。 希望初学的童鞋看到我的这篇博客能少走一些弯路.

 

-----------------------

转载请注明出处:

http://www.cnblogs.com/zhangzph/p/4475962.html

-----------------------

 

在给出代码之前,先简单介绍一下我的代码在做什么。

 

代码逻辑:

本机发送udp广播

本机开启线程,监听来自别的机器的udp广播,显示信息。 然后,对udp来源发送tcp连接

接收来自别的机器的tcp连接,并显示信息

(这里的udp广播,我使用udp多播代替了,多播具有广播的所有优点,而且有更少的缺点,实现上也比较简单,这里就不再过多地介绍了)

 

 

具体ui操作:

 

start 按钮用来启动udp 多播,stop按钮停止发送 (实际上,由于start 按钮按下之后只发送一次udp多播,stop按钮只是用于setEnabled操作)下面有两个TextView,内容为send的TextView 显示--本机发送 tcp socket 的信息; 内容为receive的TextView 显示--本机接收来自别的机器的udp socket 和 tcp socket 的信息.

 

 

几个需要注意的地方:

 

1. Android Manifest 权限设置、sdk版本信息:

本文所涉及到的这些功能需要获取 Android 的一些权限,下面是我的权限和版本信息

 

上面 条目 uses-sdk中的信息,需要在build.gradle文件中同步。

 

2. 注意udp广播,和udp广播监听需要绑定同一个端口

3. 其他的有关IDE抽风的问题,比如我的Android Studio,有时候你修改了代码,重新把程序烧进手机的时候,它竟然会用缓存中代码的老版本来烧程序。。。 还有,有时候project加载太慢,程序崩溃之后,logcat好长时间都不出错误信息,严重影响Debug

4. 建议使用android sdk版本比较新的手机进行测试。 我测试的时候,用一部4.4和5.1的成功了。混合另外一部4.0.x的则有时候不太灵通。

 

github上的项目链接:

https://github.com/zhangpzh/Anjay

 

 

主要代码:

 

xml 源码:

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode7.gif" alt="复制代码" /></a></span></div>
<pre>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MyActivity"&gt;

    &lt;LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        &gt;
        &lt;Button
            android:id="@+id/start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="start"
            /&gt;
        &lt;Button
            android:id="@+id/stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="150dp"
            android:text="stop"
            /&gt;
    &lt;/LinearLayout&gt;

    &lt;LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        &gt;
        &lt;TextView
            android:id="@+id/send_information"
            android:layout_marginTop="50dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="send"
            android:layout_marginRight="110dp"
            /&gt;
        &lt;TextView
            android:id="@+id/receive_information"
            android:layout_marginTop="50dp"
            android:text="receive"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            /&gt;
    &lt;/LinearLayout&gt;
&lt;/LinearLayout&gt;

Java 源码:

 

(github 上面的代码已经把各个通信内部类给模块化了,不再像下面这样,全都定义在一个Activity里。但是为了集中展示app的功能,下面仍使用一个文件显示)

<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">package</code> <code class="java plain">com.example.user.anjay;</code></div>
<div class="line number2 index1 alt1"></div>
<div class="line number3 index2 alt2"><code class="java keyword">import</code> <code class="java plain">android.app.Activity;</code></div>
<div class="line number4 index3 alt1"><code class="java keyword">import</code> <code class="java plain">android.os.Bundle;</code></div>
<div class="line number5 index4 alt2"><code class="java keyword">import</code> <code class="java plain">android.util.Log;</code></div>
<div class="line number6 index5 alt1"><code class="java keyword">import</code> <code class="java plain">android.view.Menu;</code></div>
<div class="line number7 index6 alt2"><code class="java keyword">import</code> <code class="java plain">android.view.MenuItem;</code></div>
<div class="line number8 index7 alt1"><code class="java keyword">import</code> <code class="java plain">android.view.View;</code></div>
<div class="line number9 index8 alt2"><code class="java keyword">import</code> <code class="java plain">android.widget.Button;</code></div>
<div class="line number10 index9 alt1"><code class="java keyword">import</code> <code class="java plain">android.widget.TextView;</code></div>
<div class="line number11 index10 alt2"></div>
<div class="line number12 index11 alt1"><code class="java keyword">import</code> <code class="java plain">com.example.user.anjay.R;</code></div>
<div class="line number13 index12 alt2"></div>
<div class="line number14 index13 alt1"><code class="java keyword">import</code> <code class="java plain">org.apache.http.conn.util.InetAddressUtils;</code></div>
<div class="line number15 index14 alt2"></div>
<div class="line number16 index15 alt1"><code class="java keyword">import</code> <code class="java plain">java.io.BufferedReader;</code></div>
<div class="line number17 index16 alt2"><code class="java keyword">import</code> <code class="java plain">java.io.IOException;</code></div>
<div class="line number18 index17 alt1"><code class="java keyword">import</code> <code class="java plain">java.io.InputStreamReader;</code></div>
<div class="line number19 index18 alt2"><code class="java keyword">import</code> <code class="java plain">java.net.DatagramPacket;</code></div>
<div class="line number20 index19 alt1"><code class="java keyword">import</code> <code class="java plain">java.net.InetAddress;</code></div>
<div class="line number21 index20 alt2"><code class="java keyword">import</code> <code class="java plain">java.net.MulticastSocket;</code></div>
<div class="line number22 index21 alt1"><code class="java keyword">import</code> <code class="java plain">java.net.NetworkInterface;</code></div>
<div class="line number23 index22 alt2"><code class="java keyword">import</code> <code class="java plain">java.net.ServerSocket;</code></div>
<div class="line number24 index23 alt1"><code class="java keyword">import</code> <code class="java plain">java.net.Socket;</code></div>
<div class="line number25 index24 alt2"><code class="java keyword">import</code> <code class="java plain">java.net.SocketException;</code></div>
<div class="line number26 index25 alt1"><code class="java keyword">import</code> <code class="java plain">java.util.Enumeration;</code></div>
<div class="line number27 index26 alt2"></div>
<div class="line number28 index27 alt1"></div>
<div class="line number29 index28 alt2"><code class="java keyword">public</code> <code class="java keyword">class</code> <code class="java plain">MyActivity </code><code class="java keyword">extends</code> <code class="java plain">Activity {</code></div>
<div class="line number30 index29 alt1"></div>
<div class="line number31 index30 alt2"><code class="java spaces">    </code><code class="java keyword">private</code> <code class="java keyword">static</code> <code class="java plain">String LOG_TAG = </code><code class="java string">"WifiMulticastActivity"</code><code class="java plain">;</code></div>
<div class="line number32 index31 alt1"></div>
<div class="line number33 index32 alt2"><code class="java spaces">    </code><code class="java plain">Button startBroadCast;</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">    </code><code class="java plain">Button stopBroadCast;</code></div>
<div class="line number35 index34 alt2"></div>
<div class="line number36 index35 alt1"><code class="java spaces">    </code><code class="java plain">TextView send_label;</code></div>
<div class="line number37 index36 alt2"><code class="java spaces">    </code><code class="java plain">TextView receive_label;</code></div>
<div class="line number38 index37 alt1"></div>
<div class="line number39 index38 alt2"><code class="java spaces">    </code><code class="java comments">/* 用于 udpReceiveAndTcpSend 的3个变量 */</code></div>
<div class="line number40 index39 alt1"><code class="java spaces">    </code><code class="java plain">Socket socket = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number41 index40 alt2"><code class="java spaces">    </code><code class="java plain">MulticastSocket ms = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number42 index41 alt1"><code class="java spaces">    </code><code class="java plain">DatagramPacket dp;</code></div>
<div class="line number43 index42 alt2"></div>
<div class="line number44 index43 alt1"><code class="java spaces">    </code><code class="java color1">@Override</code></div>
<div class="line number45 index44 alt2"><code class="java spaces">    </code><code class="java keyword">protected</code> <code class="java keyword">void</code> <code class="java plain">onCreate(Bundle savedInstanceState) {</code></div>
<div class="line number46 index45 alt1"><code class="java spaces">        </code><code class="java keyword">super</code><code class="java plain">.onCreate(savedInstanceState);</code></div>
<div class="line number47 index46 alt2"><code class="java spaces">        </code><code class="java plain">setContentView(R.layout.activity_my);</code></div>
<div class="line number48 index47 alt1"></div>
<div class="line number49 index48 alt2"><code class="java spaces">        </code><code class="java plain">startBroadCast = (Button) findViewById(R.id.start);</code></div>
<div class="line number50 index49 alt1"><code class="java spaces">        </code><code class="java plain">stopBroadCast = (Button) findViewById(R.id.stop);</code></div>
<div class="line number51 index50 alt2"></div>
<div class="line number52 index51 alt1"><code class="java spaces">        </code><code class="java plain">send_label = (TextView) findViewById(R.id.send_information);</code></div>
<div class="line number53 index52 alt2"><code class="java spaces">        </code><code class="java plain">receive_label = (TextView) findViewById(R.id.receive_information);</code></div>
<div class="line number54 index53 alt1"></div>
<div class="line number55 index54 alt2"><code class="java spaces">        </code><code class="java plain">send_label.append(</code><code class="java string">"\n\n"</code><code class="java plain">);</code></div>
<div class="line number56 index55 alt1"><code class="java spaces">        </code><code class="java plain">receive_label.append(</code><code class="java string">"\n\n"</code><code class="java plain">);</code></div>
<div class="line number57 index56 alt2"></div>
<div class="line number58 index57 alt1"><code class="java spaces">        </code><code class="java plain">startBroadCast.setOnClickListener(listener);</code></div>
<div class="line number59 index58 alt2"><code class="java spaces">        </code><code class="java plain">stopBroadCast.setOnClickListener(listener);</code></div>
<div class="line number60 index59 alt1"></div>
<div class="line number61 index60 alt2"><code class="java spaces">        </code><code class="java comments">/* 开一个线程接收tcp 连接*/</code></div>
<div class="line number62 index61 alt1"><code class="java spaces">        </code><code class="java keyword">new</code> <code class="java plain">tcpReceive().start();</code></div>
<div class="line number63 index62 alt2"></div>
<div class="line number64 index63 alt1"><code class="java spaces">        </code><code class="java comments">/* 开一个线程 接收udp多播 并 发送tcp 连接*/</code></div>
<div class="line number65 index64 alt2"><code class="java spaces">        </code><code class="java keyword">new</code> <code class="java plain">udpReceiveAndtcpSend().start();</code></div>
<div class="line number66 index65 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number67 index66 alt2"></div>
<div class="line number68 index67 alt1"><code class="java spaces">    </code><code class="java keyword">private</code> <code class="java plain">View.OnClickListener listener = </code><code class="java keyword">new</code> <code class="java plain">View.OnClickListener() {</code></div>
<div class="line number69 index68 alt2"><code class="java spaces">        </code><code class="java color1">@Override</code></div>
<div class="line number70 index69 alt1"><code class="java spaces">        </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">onClick(View v) {</code></div>
<div class="line number71 index70 alt2"><code class="java spaces">            </code><code class="java keyword">if</code> <code class="java plain">(v == startBroadCast ) {</code></div>
<div class="line number72 index71 alt1"><code class="java spaces">                </code><code class="java plain">startBroadCast.setEnabled(</code><code class="java keyword">false</code><code class="java plain">);</code></div>
<div class="line number73 index72 alt2"><code class="java spaces">                </code><code class="java plain">stopBroadCast.setEnabled(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
<div class="line number74 index73 alt1"></div>
<div class="line number75 index74 alt2"><code class="java spaces">                </code><code class="java comments">/* 新开一个线程 发送 udp 多播 */</code></div>
<div class="line number76 index75 alt1"><code class="java spaces">                </code><code class="java keyword">new</code> <code class="java plain">udpBroadCast(</code><code class="java string">"hi ~!"</code><code class="java plain">).start();</code></div>
<div class="line number77 index76 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number78 index77 alt1"><code class="java spaces">            </code><code class="java keyword">else</code> <code class="java plain">{</code></div>
<div class="line number79 index78 alt2"><code class="java spaces">                </code><code class="java plain">startBroadCast.setEnabled(</code><code class="java keyword">true</code><code class="java plain">);</code></div>
<div class="line number80 index79 alt1"><code class="java spaces">                </code><code class="java plain">stopBroadCast.setEnabled(</code><code class="java keyword">false</code><code class="java plain">);</code></div>
<div class="line number81 index80 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number82 index81 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number83 index82 alt2"><code class="java spaces">    </code><code class="java plain">};</code></div>
<div class="line number84 index83 alt1"></div>
<div class="line number85 index84 alt2"><code class="java spaces">    </code><code class="java comments">/* 发送udp多播 */</code></div>
<div class="line number86 index85 alt1"><code class="java spaces">    </code><code class="java keyword">private</code>  <code class="java keyword">class</code> <code class="java plain">udpBroadCast </code><code class="java keyword">extends</code> <code class="java plain">Thread {</code></div>
<div class="line number87 index86 alt2"><code class="java spaces">        </code><code class="java plain">MulticastSocket sender = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number88 index87 alt1"><code class="java spaces">        </code><code class="java plain">DatagramPacket dj = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number89 index88 alt2"><code class="java spaces">        </code><code class="java plain">InetAddress group = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number90 index89 alt1"></div>
<div class="line number91 index90 alt2"><code class="java spaces">        </code><code class="java keyword">byte</code><code class="java plain">[] data = </code><code class="java keyword">new</code> <code class="java keyword">byte</code><code class="java plain">[</code><code class="java value">1024</code><code class="java plain">];</code></div>
<div class="line number92 index91 alt1"></div>
<div class="line number93 index92 alt2"><code class="java spaces">        </code><code class="java keyword">public</code> <code class="java plain">udpBroadCast(String dataString) {</code></div>
<div class="line number94 index93 alt1"><code class="java spaces">            </code><code class="java plain">data = dataString.getBytes();</code></div>
<div class="line number95 index94 alt2"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number96 index95 alt1"></div>
<div class="line number97 index96 alt2"><code class="java spaces">        </code><code class="java color1">@Override</code></div>
<div class="line number98 index97 alt1"><code class="java spaces">        </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number99 index98 alt2"><code class="java spaces">            </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number100 index99 alt1"><code class="java spaces">                </code><code class="java plain">sender = </code><code class="java keyword">new</code> <code class="java plain">MulticastSocket();</code></div>
<div class="line number101 index100 alt2"><code class="java spaces">                </code><code class="java plain">group = InetAddress.getByName(</code><code class="java string">"224.0.0.1"</code><code class="java plain">);</code></div>
<div class="line number102 index101 alt1"><code class="java spaces">                </code><code class="java plain">dj = </code><code class="java keyword">new</code> <code class="java plain">DatagramPacket(data,data.length,group,</code><code class="java value">6789</code><code class="java plain">);</code></div>
<div class="line number103 index102 alt2"><code class="java spaces">                </code><code class="java plain">sender.send(dj);</code></div>
<div class="line number104 index103 alt1"><code class="java spaces">                </code><code class="java plain">sender.close();</code></div>
<div class="line number105 index104 alt2"><code class="java spaces">            </code><code class="java plain">} </code><code class="java keyword">catch</code><code class="java plain">(IOException e) {</code></div>
<div class="line number106 index105 alt1"><code class="java spaces">                </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number107 index106 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number108 index107 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number109 index108 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number110 index109 alt1"></div>
<div class="line number111 index110 alt2"><code class="java spaces">    </code><code class="java comments">/*接收udp多播 并 发送tcp 连接*/</code></div>
<div class="line number112 index111 alt1"><code class="java spaces">    </code><code class="java keyword">private</code> <code class="java keyword">class</code> <code class="java plain">udpReceiveAndtcpSend </code><code class="java keyword">extends</code>  <code class="java plain">Thread {</code></div>
<div class="line number113 index112 alt2"><code class="java spaces">        </code><code class="java color1">@Override</code></div>
<div class="line number114 index113 alt1"><code class="java spaces">        </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number115 index114 alt2"><code class="java spaces">            </code><code class="java keyword">byte</code><code class="java plain">[] data = </code><code class="java keyword">new</code> <code class="java keyword">byte</code><code class="java plain">[</code><code class="java value">1024</code><code class="java plain">];</code></div>
<div class="line number116 index115 alt1"><code class="java spaces">            </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number117 index116 alt2"><code class="java spaces">                </code><code class="java plain">InetAddress groupAddress = InetAddress.getByName(</code><code class="java string">"224.0.0.1"</code><code class="java plain">);</code></div>
<div class="line number118 index117 alt1"><code class="java spaces">                </code><code class="java plain">ms = </code><code class="java keyword">new</code> <code class="java plain">MulticastSocket(</code><code class="java value">6789</code><code class="java plain">);</code></div>
<div class="line number119 index118 alt2"><code class="java spaces">                </code><code class="java plain">ms.joinGroup(groupAddress);</code></div>
<div class="line number120 index119 alt1"><code class="java spaces">            </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(Exception e) {</code></div>
<div class="line number121 index120 alt2"><code class="java spaces">                </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number122 index121 alt1"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number123 index122 alt2"></div>
<div class="line number124 index123 alt1"><code class="java spaces">            </code><code class="java keyword">while</code> <code class="java plain">(</code><code class="java keyword">true</code><code class="java plain">) {</code></div>
<div class="line number125 index124 alt2"><code class="java spaces">                </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number126 index125 alt1"><code class="java spaces">                    </code><code class="java plain">dp = </code><code class="java keyword">new</code> <code class="java plain">DatagramPacket(data, data.length);</code></div>
<div class="line number127 index126 alt2"><code class="java spaces">                    </code><code class="java keyword">if</code> <code class="java plain">(ms != </code><code class="java keyword">null</code><code class="java plain">)</code></div>
<div class="line number128 index127 alt1"><code class="java spaces">                       </code><code class="java plain">ms.receive(dp);</code></div>
<div class="line number129 index128 alt2"><code class="java spaces">                </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(Exception e) {</code></div>
<div class="line number130 index129 alt1"><code class="java spaces">                    </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number131 index130 alt2"><code class="java spaces">                </code><code class="java plain">}</code></div>
<div class="line number132 index131 alt1"></div>
<div class="line number133 index132 alt2"><code class="java spaces">                </code><code class="java keyword">if</code> <code class="java plain">(dp.getAddress() != </code><code class="java keyword">null</code><code class="java plain">) {</code></div>
<div class="line number134 index133 alt1"><code class="java spaces">                    </code><code class="java keyword">final</code> <code class="java plain">String quest_ip = dp.getAddress().toString();</code></div>
<div class="line number135 index134 alt2"></div>
<div class="line number136 index135 alt1"><code class="java spaces">                    </code><code class="java comments">/* 若udp包的ip地址 是 本机的ip地址的话,丢掉这个包(不处理)*/</code></div>
<div class="line number137 index136 alt2"></div>
<div class="line number138 index137 alt1"><code class="java spaces">                    </code><code class="java comments">//String host_ip = getLocalIPAddress();</code></div>
<div class="line number139 index138 alt2"></div>
<div class="line number140 index139 alt1"><code class="java spaces">                    </code><code class="java plain">String host_ip = getLocalHostIp();</code></div>
<div class="line number141 index140 alt2"></div>
<div class="line number142 index141 alt1"><code class="java spaces">                    </code><code class="java plain">System.out.println(</code><code class="java string">"host_ip:  --------------------  "</code> <code class="java plain">+ host_ip);</code></div>
<div class="line number143 index142 alt2"><code class="java spaces">                    </code><code class="java plain">System.out.println(</code><code class="java string">"quest_ip: --------------------  "</code> <code class="java plain">+ quest_ip.substring(</code><code class="java value">1</code><code class="java plain">));</code></div>
<div class="line number144 index143 alt1"></div>
<div class="line number145 index144 alt2"><code class="java spaces">                    </code><code class="java keyword">if</code><code class="java plain">( (!host_ip.equals(</code><code class="java string">""</code><code class="java plain">))  &amp;&amp; host_ip.equals(quest_ip.substring(</code><code class="java value">1</code><code class="java plain">)) ) {</code></div>
<div class="line number146 index145 alt1"><code class="java spaces">                        </code><code class="java keyword">continue</code><code class="java plain">;</code></div>
<div class="line number147 index146 alt2"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number148 index147 alt1"></div>
<div class="line number149 index148 alt2"><code class="java spaces">                    </code><code class="java keyword">final</code> <code class="java plain">String codeString = </code><code class="java keyword">new</code> <code class="java plain">String(data, </code><code class="java value">0</code><code class="java plain">, dp.getLength());</code></div>
<div class="line number150 index149 alt1"></div>
<div class="line number151 index150 alt2"><code class="java spaces">                    </code><code class="java plain">receive_label.post(</code><code class="java keyword">new</code> <code class="java plain">Runnable() {</code></div>
<div class="line number152 index151 alt1"><code class="java spaces">                        </code><code class="java color1">@Override</code></div>
<div class="line number153 index152 alt2"><code class="java spaces">                        </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number154 index153 alt1"><code class="java spaces">                            </code><code class="java plain">receive_label.append(</code><code class="java string">"收到来自: \n"</code> <code class="java plain">+ quest_ip.substring(</code><code class="java value">1</code><code class="java plain">) + </code><code class="java string">"\n"</code> <code class="java plain">+</code><code class="java string">"的udp请求\n"</code><code class="java plain">);</code></div>
<div class="line number155 index154 alt2"><code class="java spaces">                            </code><code class="java plain">receive_label.append(</code><code class="java string">"请求内容: "</code> <code class="java plain">+ codeString + </code><code class="java string">"\n\n"</code><code class="java plain">);</code></div>
<div class="line number156 index155 alt1"><code class="java spaces">                        </code><code class="java plain">}</code></div>
<div class="line number157 index156 alt2"><code class="java spaces">                    </code><code class="java plain">});</code></div>
<div class="line number158 index157 alt1"><code class="java spaces">                    </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number159 index158 alt2"><code class="java spaces">                        </code><code class="java keyword">final</code> <code class="java plain">String target_ip = dp.getAddress().toString().substring(</code><code class="java value">1</code><code class="java plain">);</code></div>
<div class="line number160 index159 alt1"><code class="java spaces">                        </code><code class="java plain">send_label.post(</code><code class="java keyword">new</code> <code class="java plain">Runnable() {</code></div>
<div class="line number161 index160 alt2"><code class="java spaces">                            </code><code class="java color1">@Override</code></div>
<div class="line number162 index161 alt1"><code class="java spaces">                            </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number163 index162 alt2"><code class="java spaces">                                </code><code class="java plain">send_label.append(</code><code class="java string">"发送tcp请求到: \n"</code> <code class="java plain">+ target_ip + </code><code class="java string">"\n"</code><code class="java plain">);</code></div>
<div class="line number164 index163 alt1"><code class="java spaces">                            </code><code class="java plain">}</code></div>
<div class="line number165 index164 alt2"><code class="java spaces">                        </code><code class="java plain">});</code></div>
<div class="line number166 index165 alt1"><code class="java spaces">                        </code><code class="java plain">socket = </code><code class="java keyword">new</code> <code class="java plain">Socket(target_ip, </code><code class="java value">8080</code><code class="java plain">);</code></div>
<div class="line number167 index166 alt2"><code class="java spaces">                    </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(IOException e) {</code></div>
<div class="line number168 index167 alt1"><code class="java spaces">                        </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number169 index168 alt2"><code class="java spaces">                    </code><code class="java plain">} </code><code class="java keyword">finally</code> <code class="java plain">{</code></div>
<div class="line number170 index169 alt1"></div>
<div class="line number171 index170 alt2"><code class="java spaces">                        </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number172 index171 alt1"><code class="java spaces">                            </code><code class="java keyword">if</code> <code class="java plain">(socket != </code><code class="java keyword">null</code><code class="java plain">)</code></div>
<div class="line number173 index172 alt2"><code class="java spaces">                                </code><code class="java plain">socket.close();</code></div>
<div class="line number174 index173 alt1"><code class="java spaces">                        </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(IOException e) {</code></div>
<div class="line number175 index174 alt2"><code class="java spaces">                            </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number176 index175 alt1"><code class="java spaces">                        </code><code class="java plain">}</code></div>
<div class="line number177 index176 alt2"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number178 index177 alt1"><code class="java spaces">                </code><code class="java plain">}</code></div>
<div class="line number179 index178 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number180 index179 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number181 index180 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number182 index181 alt1"></div>
<div class="line number183 index182 alt2"></div>
<div class="line number184 index183 alt1"></div>
<div class="line number185 index184 alt2"><code class="java spaces">    </code><code class="java comments">/* 接收tcp连接 */</code></div>
<div class="line number186 index185 alt1"><code class="java spaces">    </code><code class="java keyword">private</code> <code class="java keyword">class</code> <code class="java plain">tcpReceive </code><code class="java keyword">extends</code>  <code class="java plain">Thread {</code></div>
<div class="line number187 index186 alt2"><code class="java spaces">        </code><code class="java plain">ServerSocket serverSocket;</code></div>
<div class="line number188 index187 alt1"><code class="java spaces">        </code><code class="java plain">Socket socket;</code></div>
<div class="line number189 index188 alt2"><code class="java spaces">        </code><code class="java plain">BufferedReader in;</code></div>
<div class="line number190 index189 alt1"><code class="java spaces">        </code><code class="java plain">String source_address;</code></div>
<div class="line number191 index190 alt2"></div>
<div class="line number192 index191 alt1"><code class="java spaces">        </code><code class="java color1">@Override</code></div>
<div class="line number193 index192 alt2"><code class="java spaces">        </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number194 index193 alt1"><code class="java spaces">            </code><code class="java keyword">while</code><code class="java plain">(</code><code class="java keyword">true</code><code class="java plain">) {</code></div>
<div class="line number195 index194 alt2"><code class="java spaces">                </code><code class="java plain">serverSocket = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number196 index195 alt1"><code class="java spaces">                </code><code class="java plain">socket = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number197 index196 alt2"><code class="java spaces">                </code><code class="java plain">in = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number198 index197 alt1"><code class="java spaces">                </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number199 index198 alt2"><code class="java spaces">                    </code><code class="java plain">Log.i(</code><code class="java string">"Tcp Receive"</code><code class="java plain">,</code><code class="java string">" new ServerSocket ++++++++++"</code><code class="java plain">);</code></div>
<div class="line number200 index199 alt1"><code class="java spaces">                    </code><code class="java plain">serverSocket = </code><code class="java keyword">new</code> <code class="java plain">ServerSocket(</code><code class="java value">8080</code><code class="java plain">);</code></div>
<div class="line number201 index200 alt2"></div>
<div class="line number202 index201 alt1"><code class="java spaces">                    </code><code class="java plain">socket = serverSocket.accept();</code></div>
<div class="line number203 index202 alt2"><code class="java spaces">                    </code><code class="java plain">Log.i(</code><code class="java string">"Tcp Receive"</code><code class="java plain">,</code><code class="java string">" get socket ++++++++++++++++"</code><code class="java plain">);</code></div>
<div class="line number204 index203 alt1"></div>
<div class="line number205 index204 alt2"><code class="java spaces">                    </code><code class="java keyword">if</code><code class="java plain">(socket != </code><code class="java keyword">null</code><code class="java plain">) {</code></div>
<div class="line number206 index205 alt1"><code class="java spaces">                        </code><code class="java plain">in = </code><code class="java keyword">new</code> <code class="java plain">BufferedReader(</code><code class="java keyword">new</code> <code class="java plain">InputStreamReader(socket.getInputStream()));</code></div>
<div class="line number207 index206 alt2"><code class="java spaces">                        </code><code class="java plain">StringBuilder sb = </code><code class="java keyword">new</code> <code class="java plain">StringBuilder();</code></div>
<div class="line number208 index207 alt1"><code class="java spaces">                        </code><code class="java plain">sb.append(socket.getInetAddress().getHostAddress());</code></div>
<div class="line number209 index208 alt2"></div>
<div class="line number210 index209 alt1"><code class="java spaces">                        </code><code class="java plain">String line = </code><code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number211 index210 alt2"><code class="java spaces">                        </code><code class="java keyword">while</code> <code class="java plain">((line = in.readLine()) != </code><code class="java keyword">null</code> <code class="java plain">) {</code></div>
<div class="line number212 index211 alt1"><code class="java spaces">                            </code><code class="java plain">sb.append(line);</code></div>
<div class="line number213 index212 alt2"><code class="java spaces">                        </code><code class="java plain">}</code></div>
<div class="line number214 index213 alt1"></div>
<div class="line number215 index214 alt2"><code class="java spaces">                        </code><code class="java plain">source_address = sb.toString().trim();</code></div>
<div class="line number216 index215 alt1"><code class="java spaces">                        </code><code class="java plain">receive_label.post(</code><code class="java keyword">new</code> <code class="java plain">Runnable() {</code></div>
<div class="line number217 index216 alt2"><code class="java spaces">                            </code><code class="java color1">@Override</code></div>
<div class="line number218 index217 alt1"><code class="java spaces">                            </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">run() {</code></div>
<div class="line number219 index218 alt2"><code class="java spaces">                                </code><code class="java plain">receive_label.append(</code><code class="java string">"收到来自: "</code><code class="java plain">+</code><code class="java string">"\n"</code> <code class="java plain">+source_address+</code><code class="java string">"\n"</code><code class="java plain">+</code><code class="java string">"的tcp请求\n\n"</code><code class="java plain">);</code></div>
<div class="line number220 index219 alt1"><code class="java spaces">                            </code><code class="java plain">}</code></div>
<div class="line number221 index220 alt2"><code class="java spaces">                        </code><code class="java plain">});</code></div>
<div class="line number222 index221 alt1"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number223 index222 alt2"><code class="java spaces">                </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(IOException e1) {</code></div>
<div class="line number224 index223 alt1"><code class="java spaces">                    </code><code class="java plain">e1.printStackTrace();</code></div>
<div class="line number225 index224 alt2"><code class="java spaces">                </code><code class="java plain">} </code><code class="java keyword">finally</code> <code class="java plain">{</code></div>
<div class="line number226 index225 alt1"><code class="java spaces">                    </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number227 index226 alt2"><code class="java spaces">                        </code><code class="java keyword">if</code> <code class="java plain">(in != </code><code class="java keyword">null</code><code class="java plain">)</code></div>
<div class="line number228 index227 alt1"><code class="java spaces">                            </code><code class="java plain">in.close();</code></div>
<div class="line number229 index228 alt2"><code class="java spaces">                        </code><code class="java keyword">if</code> <code class="java plain">(socket != </code><code class="java keyword">null</code><code class="java plain">)</code></div>
<div class="line number230 index229 alt1"><code class="java spaces">                            </code><code class="java plain">socket.close();</code></div>
<div class="line number231 index230 alt2"><code class="java spaces">                        </code><code class="java keyword">if</code> <code class="java plain">(serverSocket != </code><code class="java keyword">null</code><code class="java plain">)</code></div>
<div class="line number232 index231 alt1"><code class="java spaces">                            </code><code class="java plain">serverSocket.close();</code></div>
<div class="line number233 index232 alt2"><code class="java spaces">                    </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(IOException e) {</code></div>
<div class="line number234 index233 alt1"><code class="java spaces">                        </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number235 index234 alt2"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number236 index235 alt1"><code class="java spaces">                </code><code class="java plain">}</code></div>
<div class="line number237 index236 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number238 index237 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number239 index238 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number240 index239 alt1"></div>
<div class="line number241 index240 alt2"><code class="java spaces">    </code><code class="java keyword">public</code> <code class="java plain">String getLocalHostIp() {</code></div>
<div class="line number242 index241 alt1"><code class="java spaces">        </code><code class="java plain">String ipaddress = </code><code class="java string">""</code><code class="java plain">;</code></div>
<div class="line number243 index242 alt2"><code class="java spaces">        </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number244 index243 alt1"><code class="java spaces">            </code><code class="java plain">Enumeration&lt;NetworkInterface&gt; en = NetworkInterface</code></div>
<div class="line number245 index244 alt2"><code class="java spaces">                    </code><code class="java plain">.getNetworkInterfaces();</code></div>
<div class="line number246 index245 alt1"><code class="java spaces">            </code><code class="java comments">// 遍历所用的网络接口</code></div>
<div class="line number247 index246 alt2"><code class="java spaces">            </code><code class="java keyword">while</code> <code class="java plain">(en.hasMoreElements()) {</code></div>
<div class="line number248 index247 alt1"><code class="java spaces">                </code><code class="java plain">NetworkInterface nif = en.nextElement();</code><code class="java comments">// 得到每一个网络接口绑定的所有ip</code></div>
<div class="line number249 index248 alt2"><code class="java spaces">                </code><code class="java plain">Enumeration&lt;InetAddress&gt; inet = nif.getInetAddresses();</code></div>
<div class="line number250 index249 alt1"><code class="java spaces">                </code><code class="java comments">// 遍历每一个接口绑定的所有ip</code></div>
<div class="line number251 index250 alt2"><code class="java spaces">                </code><code class="java keyword">while</code> <code class="java plain">(inet.hasMoreElements()) {</code></div>
<div class="line number252 index251 alt1"><code class="java spaces">                    </code><code class="java plain">InetAddress ip = inet.nextElement();</code></div>
<div class="line number253 index252 alt2"><code class="java spaces">                    </code><code class="java keyword">if</code> <code class="java plain">(!ip.isLoopbackAddress()</code></div>
<div class="line number254 index253 alt1"><code class="java spaces">                            </code><code class="java plain">&amp;&amp; InetAddressUtils.isIPv4Address(ip</code></div>
<div class="line number255 index254 alt2"><code class="java spaces">                            </code><code class="java plain">.getHostAddress())) {</code></div>
<div class="line number256 index255 alt1"><code class="java spaces">                        </code><code class="java keyword">return</code> <code class="java plain">ip.getHostAddress();</code></div>
<div class="line number257 index256 alt2"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number258 index257 alt1"><code class="java spaces">                </code><code class="java plain">}</code></div>
<div class="line number259 index258 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number260 index259 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number261 index260 alt2"><code class="java spaces">        </code><code class="java keyword">catch</code><code class="java plain">(SocketException e)</code></div>
<div class="line number262 index261 alt1"><code class="java spaces">        </code><code class="java plain">{</code></div>
<div class="line number263 index262 alt2"><code class="java spaces">                </code><code class="java plain">Log.e(</code><code class="java string">"feige"</code><code class="java plain">, </code><code class="java string">"获取本地ip地址失败"</code><code class="java plain">);</code></div>
<div class="line number264 index263 alt1"><code class="java spaces">                </code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number265 index264 alt2"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number266 index265 alt1"><code class="java spaces">        </code><code class="java keyword">return</code> <code class="java plain">ipaddress;</code></div>
<div class="line number267 index266 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number268 index267 alt1"></div>
<div class="line number269 index268 alt2"><code class="java spaces">    </code><code class="java keyword">private</code> <code class="java plain">String getLocalIPAddress() {</code></div>
<div class="line number270 index269 alt1"><code class="java spaces">        </code><code class="java keyword">try</code> <code class="java plain">{</code></div>
<div class="line number271 index270 alt2"><code class="java spaces">            </code><code class="java keyword">for</code> <code class="java plain">(Enumeration&lt;NetworkInterface&gt; en = NetworkInterface</code></div>
<div class="line number272 index271 alt1"><code class="java spaces">                    </code><code class="java plain">.getNetworkInterfaces(); en.hasMoreElements();) {</code></div>
<div class="line number273 index272 alt2"><code class="java spaces">                </code><code class="java plain">NetworkInterface intf = en.nextElement();</code></div>
<div class="line number274 index273 alt1"><code class="java spaces">                </code><code class="java keyword">for</code> <code class="java plain">(Enumeration&lt;InetAddress&gt; enumIpAddr = intf</code></div>
<div class="line number275 index274 alt2"><code class="java spaces">                        </code><code class="java plain">.getInetAddresses(); enumIpAddr.hasMoreElements();) {</code></div>
<div class="line number276 index275 alt1"><code class="java spaces">                    </code><code class="java plain">InetAddress inetAddress = enumIpAddr.nextElement();</code></div>
<div class="line number277 index276 alt2"><code class="java spaces">                    </code><code class="java keyword">if</code> <code class="java plain">(!inetAddress.isLoopbackAddress()) {</code></div>
<div class="line number278 index277 alt1"><code class="java spaces">                        </code><code class="java keyword">return</code> <code class="java plain">inetAddress.getHostAddress().toString();</code></div>
<div class="line number279 index278 alt2"><code class="java spaces">                    </code><code class="java plain">}</code></div>
<div class="line number280 index279 alt1"><code class="java spaces">                </code><code class="java plain">}</code></div>
<div class="line number281 index280 alt2"><code class="java spaces">            </code><code class="java plain">}</code></div>
<div class="line number282 index281 alt1"><code class="java spaces">        </code><code class="java plain">} </code><code class="java keyword">catch</code> <code class="java plain">(SocketException ex) {</code></div>
<div class="line number283 index282 alt2"><code class="java spaces">            </code><code class="java plain">Log.e(LOG_TAG, ex.toString());</code></div>
<div class="line number284 index283 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number285 index284 alt2"><code class="java spaces">        </code><code class="java keyword">return</code> <code class="java keyword">null</code><code class="java plain">;</code></div>
<div class="line number286 index285 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number287 index286 alt2"></div>
<div class="line number288 index287 alt1"><code class="java spaces">    </code><code class="java comments">// 按下返回键时,关闭 多播socket ms</code></div>
<div class="line number289 index288 alt2"><code class="java spaces">    </code><code class="java color1">@Override</code></div>
<div class="line number290 index289 alt1"><code class="java spaces">    </code><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">onBackPressed() {</code></div>
<div class="line number291 index290 alt2"><code class="java spaces">        </code><code class="java plain">ms.close();</code></div>
<div class="line number292 index291 alt1"><code class="java spaces">        </code><code class="java keyword">super</code><code class="java plain">.onBackPressed();</code></div>
<div class="line number293 index292 alt2"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number294 index293 alt1"></div>
<div class="line number295 index294 alt2"><code class="java spaces">    </code><code class="java color1">@Override</code></div>
<div class="line number296 index295 alt1"><code class="java spaces">    </code><code class="java keyword">public</code> <code class="java keyword">boolean</code> <code class="java plain">onCreateOptionsMenu(Menu menu) {</code></div>
<div class="line number297 index296 alt2"><code class="java spaces">        </code><code class="java comments">// Inflate the menu; this adds items to the action bar if it is present.</code></div>
<div class="line number298 index297 alt1"><code class="java spaces">        </code><code class="java plain">getMenuInflater().inflate(R.menu.my, menu);</code></div>
<div class="line number299 index298 alt2"><code class="java spaces">        </code><code class="java keyword">return</code> <code class="java keyword">true</code><code class="java plain">;</code></div>
<div class="line number300 index299 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number301 index300 alt2"></div>
<div class="line number302 index301 alt1"><code class="java spaces">    </code><code class="java color1">@Override</code></div>
<div class="line number303 index302 alt2"><code class="java spaces">    </code><code class="java keyword">public</code> <code class="java keyword">boolean</code> <code class="java plain">onOptionsItemSelected(MenuItem item) {</code></div>
<div class="line number304 index303 alt1"><code class="java spaces">        </code><code class="java comments">// Handle action bar item clicks here. The action bar will</code></div>
<div class="line number305 index304 alt2"><code class="java spaces">        </code><code class="java comments">// automatically handle clicks on the Home/Up button, so long</code></div>
<div class="line number306 index305 alt1"><code class="java spaces">        </code><code class="java comments">// as you specify a parent activity in AndroidManifest.xml.</code></div>
<div class="line number307 index306 alt2"><code class="java spaces">        </code><code class="java keyword">int</code> <code class="java plain">id = item.getItemId();</code></div>
<div class="line number308 index307 alt1"><code class="java spaces">        </code><code class="java keyword">if</code> <code class="java plain">(id == R.id.action_settings) {</code></div>
<div class="line number309 index308 alt2"><code class="java spaces">            </code><code class="java keyword">return</code> <code class="java keyword">true</code><code class="java plain">;</code></div>
<div class="line number310 index309 alt1"><code class="java spaces">        </code><code class="java plain">}</code></div>
<div class="line number311 index310 alt2"><code class="java spaces">        </code><code class="java keyword">return</code> <code class="java keyword">super</code><code class="java plain">.onOptionsItemSelected(item);</code></div>
<div class="line number312 index311 alt1"><code class="java spaces">    </code><code class="java plain">}</code></div>
<div class="line number313 index312 alt2"><code class="java plain">}</code></div>
<div class="line number313 index312 alt2">
如果有错漏的地方,还请批评指正。毕竟是初学者,不出错,不疏忽是不可能的。

电商征税来了

mikel阅读(876)

一直悬在电商头上的税终于是要落下来了,从天猫的严打,到国家征税的到来,不知道多少商家露出无奈,本来就被分摊的利润,平台抽成不算,这国家也要征税了,商家只能被动接受着。

电商从开始就是因减少中间环节降低了成本才让传统企业好像一下子见到了一个高价值的市场,于是纷纷不惜血本的投入到电商大潮中,让本就纷乱的电商市场更加热闹,然后大家都来了,国家不干了,治理开始什么假货、仿货都要治理,最后下来了杀手征税,阿里也坐不住了从平台的严打开始让天下本来难做的生意就更加步履蹒跚了,商家困苦的逃离自建电商又一时半会儿不见效果。

互联网+推动的是多少激情澎湃的创业资金的涌入互联网,又有多少互联网老兵的出逃和跨界影藏在热闹的创业+大潮之下,微商更加是火上浇油得来了一把火,把人们的心都烧乱了,投入到电商的人们在赚着头寸的利润。

不知道电商能走多远,税又怎么个征法儿,老百姓只能等待着那一刻的来临。

Android自定义toast - 飞天小鳄 - 博客园

mikel阅读(1004)

来源: Android自定义toast – 飞天小鳄 – 博客园

在开发Android应用时,一般我们都会用toast来弹出提示消息,简单高 效。但是在不同的手机下toast显示的位置和样式可能会不同,而且系统自带的toast样式奇丑(个人觉得…),那么怎样定制一个个性的toast 提示框呢。。。  今天我就分享一下自己写的自定义toast,不足之处还请大家多多指点。(后边有效果图)

 

1、因为toast的特性,所以我们定义toast为单例模式。

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode4.gif" alt="复制代码" /></a></span></div>
<pre>private static ZToast instance; //单例的
    private View mToastView;//自定义toast view
    private TextView mTextView;
    private Boolean mIsShow;//记录状态 是否在显示
    private Timer mTimer;//定时器


    public synchronized static ZToast getInstance(Context context) {
        if (instance == null)
            instance = new ZToast(context);
        return instance;
    }    

    private ZToast(Context context) {
        mIsShow = false;// 记录当前Toast的内容是否已经在显示

     //这里初始化toast view
        mToastView = LayoutInflater.from(context).inflate(R.layout.common_toast, null);
                
     //用来提示的文字
        mTextView = ((TextView) mToastView.findViewById(R.id.toast_text));

     //初始化计数器
        mTimer = new Timer();
        // 设置布局参数
        setParams();
    }        

2、接着设置布局样式:

    private LayoutParams mParams;
    private void setParams() {
        mParams = new WindowManager.LayoutParams();//初始化
        mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;  //高
        mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;   //宽
        mParams.format = PixelFormat.TRANSLUCENT;               
        mParams.windowAnimations = R.style.custom_animation_toast;// 设置进入退出动画效果
        mParams.type = WindowManager.LayoutParams.TYPE_TOAST;
        mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
        mParams.gravity = Gravity.BOTTOM;        //对其方式
        mParams.y = 45;      //下间距
    }

3、自定义toast弹出风格 动画的效果 。  toast_styles.xml

</pre>
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;resources&gt;
    &lt;style name="custom.animation.toast" parent="@android:style/Animation.Toast"&gt;
        &lt;item name="android:windowEnterAnimation"&gt;@anim/toast_enter&lt;/item&gt;
        &lt;item name="android:windowExitAnimation"&gt;@anim/toast_exit&lt;/item&gt;
    &lt;/style&gt;
&lt;/resources&gt;</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode4.gif" alt="复制代码" /></a></span>
toast_enter.xml
复制代码

</div>
<div class="cnblogs_code_toolbar">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;set xmlns:android="http://schemas.android.com/apk/res/android" &gt;

&lt;translate
android:duration="1"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="85" /&gt;
&lt;translate
android:duration="350"
android:fillAfter="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@interpolator/accelerate_quad"
android:toXDelta="0"
android:toYDelta="-105" /&gt;

&lt;alpha
android:duration="100"
android:fromAlpha="0"
android:toAlpha="1" /&gt;

&lt;translate
android:duration="80"
android:fillAfter="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:startOffset="350"
android:toXDelta="0"
android:toYDelta="20" /&gt;

&lt;/set&gt;</div>
<div class="cnblogs_code_toolbar">
toast_exit.xml
</div>
<div class="cnblogs_code_toolbar">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;set xmlns:android="http://schemas.android.com/apk/res/android" &gt;

&lt;translate
android:duration="500"
android:fromYDelta="0"
android:interpolator="@interpolator/accelerate_quad"
android:toYDelta="50%p" /&gt;

&lt;alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0" /&gt;

&lt;/set&gt;</div>
<div class="cnblogs_code_toolbar">
4、common_toast.xml
</div>
<div class="cnblogs_code_toolbar">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_common_toast"
android:orientation="horizontal" &gt;

&lt;TextView
android:id="@+id/toast_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:gravity="left|center"
android:textColor="@android:color/black"
android:textSize="@dimen/toast_font_size" /&gt;

&lt;/LinearLayout&gt;</div>
<div class="cnblogs_code_toolbar">
以上,这样就得到了一个自定义的带动画效果的view容器了。然后,怎么调用呢? 别急,我们需要再写个方法。。
</div>
<div class="cnblogs_code_toolbar">    public void show(String text, int mShowTime) {
if (mIsShow) {// 如果Toast已经在显示 就先给隐藏了
if (ManageApp.mWdm != null &amp;&amp; mToastView != null)
ManageApp.mWdm.removeView(mToastView);
// 取消计时器
if (mTimer != null) {
mTimer.cancel();
mTimer = new Timer();
}
}
//设置显示内容
mTextView.setText(text);
//设置显示状态
mIsShow = true;
// 将其加载到windowManager上
ManageApp.mWdm.addView(mToastView, mParams);

//设置计时器
mTimer.schedule(new TimerTask() {
@Override
public void run() {
ManageApp.mWdm.removeView(mToastView);
mIsShow = false;
}
}, (long) (mShowTime == Toast.LENGTH_LONG ? 2200 : 1200));
}</div>
<div class="cnblogs_code_toolbar">

大家会问mWdm是个神马?  其实它就是WindowManager(public static WindowManager mWdm;),最终还是需要使用它来吧view显示在屏幕上的。我们把它定义在程序的Application类中,并在oncreate()里初始化 mWdm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 这样就能保证他的生命周期会比我们的activity长,从而在执行计时器的时候不会报各种各样的异常。(如果有其他更好的办法,望告知。)

然后,在其他类中,使用


ZToast.getInstance(mContext).show("我是自定义的toast",Toast.LENGTH_LONG );

效果如下:

asp.netMVC中的自动绑定模型测试小结 - 的蓝 - 博客园

mikel阅读(787)

来源: asp.netMVC中的自动绑定模型测试小结 – 的蓝 – 博客园

很久没有自己测试测试一些东西了,今天特意测试了一下MVC中自动绑定模型。本人也是小菜,希望能帮助到小小菜。。。。嘿嘿

1.首先,创建一个MVC4的项目

 

2.创建一个Controller(控制器),有些小小菜肯定也知道Home是路由里默认的。

 

 

3.控制器都有了,默认会有个Index动作方法,我们只需要在拷贝一个接受Post请求的action即可

1
2
3
4
5
6
7
8
9
10
11
12
public ActionResult Index()
{
    return View();
}
[HttpPost]
//视图中加的是实体类中的属性名对应
  //集合模型,视图为动作方法参数名字[索引].属性名
public ActionResult Index(List<Student> stu)
{
    
    return View();
}

 

为了压缩例子,这里直接就动用集合,这里有个测试类中犹如【小明】般存在的类Student,我们来看它的结构

1
2
3
4
5
6
7
8
9
10
11
12
public class Student
{
  
    public int Id { get; set; }
    public string Name { get; set; }
    public StudentExt Stu { get; set; }
}
public class StudentExt
{
    public string Address { get; set; }
}

 

好简单吧,我们只是做测试而已,足够了。当我们有了方法和模型了以后,我们需要用一个视图来装载这个模型。添加个视图。

当我们有了视图以后,我们要在里面增加模型的属性,以便在提交表单的时候Action能接收到模型数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@{
    ViewBag.Title = "Index";
}
@using (Html.BeginForm("Index"))
{
    @Html.TextBox("stu[0].Id")     @*注释,stu代表action的参数名,由于该参数是集合[0]代表第一项,Id代表它的属性,大写的Stu代表stu的属性,Address代表Stu的属性*@<br>    @Html.TextBox("stu[0].Name")
    @Html.TextBox("stu[0].Stu.Address");
    <br />
    @Html.TextBox("stu[1].Id")
    @Html.TextBox("stu[1].Name")
    @Html.TextBox("stu[1].Stu.Address");
    <br />
    <input type="submit" value="测试简单模型" />
}

我们来运行一下看看效果,当我们点击测试简单模型时,注意点之前注意打个断点以便观察这样是否能拿到模型。

 

我真点了- -,来看拿到什么了吧!

 

测试完毕,成功拿到模型数据。

构建高性能插件式Web框架 - NetUML - 博客园

mikel阅读(923)

来源: 构建高性能插件式Web框架 – NetUML – 博客园

构建高性能插件式Web框架

  基于MVC插件模式构建支持数据库集群、数据实时同步、数据发布与订阅的Web框架系统。如下图:

  1、基于插件式开发

采用插件模式开发的优点是使得系统框架和业务模式有效地进行分离,系统更新也比较简单,只需更新业务插件,不需要动整个框架,开发人员无需关心整个框架结构。

但插件模式调试稍微麻烦一点,比不采用插件模式开发的效率上也要差一点,因为它采用反射进行动态加载插件。

登录插件示例:


namespace LoginPlugin
{
public class Plugin : NetUML.Portal.Framework.AbstractPlugin
{

public Plugin()
{

this.Title = "系统登录";
this.Description = "登录插件";
}


public override string Name
{
get { return "LoginPlugin"; }
set { }
}


public override int StartLevel
{
get { return 2; }
set { }
}

public override void Start(NetUML.Portal.Framework.IBundleContext context)
{

}

public override void Stop(NetUML.Portal.Framework.IBundleContext context)
{

}
public override string SymbolicName
{
set { }
get { return "System.Login"; }
}


public override List&lt;NetUML.Portal.Framework.MenuItem&gt; MenuItems
{
get { return null; }
}

public override NetUML.Portal.Framework.PluginType PluginType
{
get
{
return NetUML.Portal.Framework.PluginType.Login;
}
}

public override string Title
{
get;
set;
}

public override string Description
{
get;
set;
}
}
}

所有插件必须实现 NetUML.Portal.Framework.AbstractPlugin 这个插件抽象类。

当加载插件的时候会执行Start方法,停止插件的时候会执行Stop方法。

  2、数据库引擎

数据库引擎NetUML.DataEngine类,采用IBatisNet底层访问数据库原理,动态创建IDbConnection连接池,核心代码如下

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode3.gif" alt="复制代码" /></a></span></div>
<pre>  1 namespace NetUML.DataEngine
  2 {
  3     public class DbSession : MarshalByRefObject, IDalSession
  4     {
  5 
  6         #region Fields
  7         private IDataSource _dataSource = null;
  8         private bool _isTransactionOpen = false;
  9         private bool _consistent = false;
 10         private IDbConnection _connection = null;
 11         private IDbTransaction _transaction = null;
 12         #endregion
 13         public DbSession(IDataSource dataSource)
 14         {
 15             _dataSource = dataSource;
 16         }
 17         public IDataSource DataSource
 18         {
 19             get { return _dataSource; }
 20         }
 21 
 22         public System.Data.IDbConnection Connection
 23         {
 24             get { return _connection; }
 25         }
 26 
 27         public System.Data.IDbTransaction Transaction
 28         {
 29             get { return _transaction; }
 30         }
 31 
 32         public bool IsTransactionStart
 33         {
 34             get { return _isTransactionOpen; }
 35         }
 36         private bool Consistent
 37         {
 38             set { _consistent = value; }
 39         }
 40         public void Complete()
 41         {
 42             this.Consistent = true;
 43         }
 44 
 45         public void OpenConnection()
 46         {
 47             this.OpenConnection(_dataSource.ConnectionString);
 48         }
 49         public void OpenConnection(string connectionString)
 50         {
 51             if (_connection == null)
 52             {
 53                 CreateConnection(connectionString);
 54                 try
 55                 {
 56                     _connection.Open();
 57                     //if (_logger.IsDebugEnabled)
 58                     //{
 59                     //    _logger.Debug(string.Format("Open Connection \"{0}\" to \"{1}\".", _connection.GetHashCode().ToString(), _dataSource.DbProvider.Description));
 60                     //}
 61                 }
 62                 catch (Exception ex)
 63                 {
 64                     //DataMapperException
 65                     throw new Exception(string.Format("Unable to open connection to \"{0}\".", _dataSource.DbProvider.Description), ex);
 66                 }
 67             }
 68             else if (_connection.State != ConnectionState.Open)
 69             {
 70                 try
 71                 {
 72                     _connection.Open();
 73                     //if (_logger.IsDebugEnabled)
 74                     //{
 75                     //    _logger.Debug(string.Format("Open Connection \"{0}\" to \"{1}\".", _connection.GetHashCode().ToString(), _dataSource.DbProvider.Description));
 76                     //}
 77                 }
 78                 catch (Exception ex)
 79                 {
 80                     throw new Exception(string.Format("Unable to open connection to \"{0}\".", _dataSource.DbProvider.Description), ex);
 81                 }
 82             }
 83         }
 84         public void CreateConnection()
 85         {
 86             CreateConnection(_dataSource.ConnectionString);
 87         }
 88         /// &lt;summary&gt;
 89         /// Create the connection
 90         /// &lt;/summary&gt;
 91         public void CreateConnection(string connectionString)
 92         {
 93             _connection = _dataSource.DbProvider.CreateConnection();
 94             _connection.ConnectionString = connectionString;
 95         }
 96 
 97         public void CloseConnection()
 98         {
 99             if ((_connection != null) &amp;&amp; (_connection.State != ConnectionState.Closed))
100             {
101                 _connection.Close();
102                 //if (_logger.IsDebugEnabled)
103                 //{
104                 //    _logger.Debug(string.Format("Close Connection \"{0}\" to \"{1}\".", _connection.GetHashCode().ToString(), _dataSource.DbProvider.Description));
105                 //}
106                 _connection.Dispose();
107             }
108             _connection = null;
109         }
110 
111         public void BeginTransaction()
112         {
113             this.BeginTransaction(_dataSource.ConnectionString);
114         }
115 
116         public void BeginTransaction(string connectionString)
117         {
118             if (_connection == null || _connection.State != ConnectionState.Open)
119             {
120                 this.OpenConnection(connectionString);
121             }
122             _transaction = _connection.BeginTransaction();
123             //if (_logger.IsDebugEnabled)
124             //{
125             //    _logger.Debug("Begin Transaction.");
126             //}
127             _isTransactionOpen = true;
128         }
129         public void BeginTransaction(bool openConnection)
130         {
131             if (openConnection)
132             {
133                 this.BeginTransaction();
134             }
135             else
136             {
137                 if (_connection == null || _connection.State != ConnectionState.Open)
138                 {
139                     this.OpenConnection();
140                 }
141                 _transaction = _connection.BeginTransaction();
142                 //if (_logger.IsDebugEnabled)
143                 //{
144                 //    _logger.Debug("Begin Transaction.");
145                 //}
146                 _isTransactionOpen = true;
147             }
148         }
149         public void BeginTransaction(System.Data.IsolationLevel isolationLevel)
150         {
151             this.BeginTransaction(_dataSource.ConnectionString, isolationLevel);
152         }
153         public void BeginTransaction(string connectionString, System.Data.IsolationLevel isolationLevel)
154         {
155             if (_connection == null || _connection.State != ConnectionState.Open)
156             {
157                 this.OpenConnection(connectionString);
158             }
159             _transaction = _connection.BeginTransaction(isolationLevel);
160             //if (_logger.IsDebugEnabled)
161             //{
162             //    _logger.Debug("Begin Transaction.");
163             //}
164             _isTransactionOpen = true;
165         }
166         public void BeginTransaction(bool openConnection, System.Data.IsolationLevel isolationLevel)
167         {
168             this.BeginTransaction(_dataSource.ConnectionString, openConnection, isolationLevel);
169         }
170         public void BeginTransaction(string connectionString, bool openConnection, System.Data.IsolationLevel isolationLevel)
171         {
172             if (openConnection)
173             {
174                 this.BeginTransaction(connectionString, isolationLevel);
175             }
176             else
177             {
178                 if (_connection == null || _connection.State != ConnectionState.Open)
179                 {
180                     //DataMapperException
181                     throw new Exception("SqlMapSession could not invoke StartTransaction(). A Connection must be started. Call OpenConnection() first.");
182                 }
183                 _transaction = _connection.BeginTransaction(isolationLevel);
184                 //if (_logger.IsDebugEnabled)
185                 //{
186                 //    _logger.Debug("Begin Transaction.");
187                 //}
188                 _isTransactionOpen = true;
189             }
190         }
191         public void CommitTransaction()
192         {
193             //if (_logger.IsDebugEnabled)
194             //{
195             //    _logger.Debug("Commit Transaction.");
196             //}
197             _transaction.Commit();
198             _transaction.Dispose();
199             _transaction = null;
200             _isTransactionOpen = false;
201 
202             if (_connection.State != ConnectionState.Closed)
203             {
204                 this.CloseConnection();
205             }
206         }
207 
208         public void CommitTransaction(bool closeConnection)
209         {
210             if (closeConnection)
211             {
212                 this.CommitTransaction();
213             }
214             else
215             {
216                 //if (_logger.IsDebugEnabled)
217                 //{
218                 //    _logger.Debug("Commit Transaction.");
219                 //}
220                 _transaction.Commit();
221                 _transaction.Dispose();
222                 _transaction = null;
223                 _isTransactionOpen = false;
224             }
225         }
226 
227         public void RollBackTransaction()
228         {
229             //if (_logger.IsDebugEnabled)
230             //{
231             //    _logger.Debug("RollBack Transaction.");
232             //}
233             _transaction.Rollback();
234             _transaction.Dispose();
235             _transaction = null;
236             _isTransactionOpen = false;
237             if (_connection.State != ConnectionState.Closed)
238             {
239                 this.CloseConnection();
240             }
241         }
242 
243         public void RollBackTransaction(bool closeConnection)
244         {
245             if (closeConnection)
246             {
247                 this.RollBackTransaction();
248             }
249             else
250             {
251                 //if (_logger.IsDebugEnabled)
252                 //{
253                 //    _logger.Debug("RollBack Transaction.");
254                 //}
255                 _transaction.Rollback();
256                 _transaction.Dispose();
257                 _transaction = null;
258                 _isTransactionOpen = false;
259             }
260         }
261 
262         public IDbCommand CreateCommand(CommandType commandType)
263         {
264             IDbCommand command = _dataSource.DbProvider.CreateCommand();
265             command.CommandType = commandType;
266             command.Connection = _connection;
267             if (_transaction != null)
268             {
269                 try
270                 {
271                     command.Transaction = _transaction;
272                 }
273                 catch
274                 { }
275             }
276             if (_connection != null)
277             {
278                 try
279                 {
280                     command.CommandTimeout = _connection.ConnectionTimeout;
281                 }
282                 catch (NotSupportedException e)
283                 {
284                     //if (_logger.IsInfoEnabled)
285                     //{
286                     //    _logger.Info(e.Message);
287                     //}
288                 }
289             }
290             return command;
291         }
292 
293         public System.Data.IDbDataParameter CreateDataParameter()
294         {
295             return _dataSource.DbProvider.CreateDataParameter();
296         }
297         public System.Data.IDbDataAdapter CreateDataAdapter()
298         {
299             return _dataSource.DbProvider.CreateDataAdapter();
300         }
301         public System.Data.IDbDataAdapter CreateDataAdapter(System.Data.IDbCommand command)
302         {
303             IDbDataAdapter dataAdapter = null;
304             dataAdapter = _dataSource.DbProvider.CreateDataAdapter();
305             dataAdapter.SelectCommand = command;
306             return dataAdapter;
307         }
308         public void Dispose()
309         {
310             //if (_logger.IsDebugEnabled)
311             //{
312             //    _logger.Debug("Dispose SqlMapSession");
313             //}
314             if (_isTransactionOpen == false)
315             {
316                 if (_connection.State != ConnectionState.Closed)
317                 {
318                     this.CloseConnection();
319                 }
320             }
321             else
322             {
323                 if (_consistent)
324                 {
325                     this.CommitTransaction();
326                     _isTransactionOpen = false;
327                 }
328                 else
329                 {
330                     if (_connection.State != ConnectionState.Closed)
331                     {
332                         this.RollBackTransaction();
333                         _isTransactionOpen = false;
334                     }
335                 }
336             }
337         }
338     }
339 }

程序结构如下图:

 

  3、数据库集群服务

NetUML.DataEngine支持多数据库连接,主持数据库读写分离操作,哪些数据表需要读写分离可以进行相应的配置和管理,类似于MVC中的路由概念,咱们可以配置多条路由表,路由表内容包括数

据表名,数据对象关键词以及数据库信息,用户保存数据的时候,系统根据要保存的数据表以及数据对象去寻找路由,再根据路由中的配置信息进行提交到数据库。

进在开发中。。。。。。。。

  4、数据同步、发布和订阅服务

如果第三方系统接入当前系统当中来,当前系统中的数据发生变化,需要立马通知接入进来的系统,把变化的数据提交给第三方系统,第三方系统接入到数据进行相应的处理。

第三方系统只需要提供给当前系统一个URL地址,当前系统把数据POST到URL地址。

进在开发中。。。。。。。。

  5、插件管理

系统框架支持上传插件包,不需要到服务器进行更新程序,上传完插件包之后,系统自动把插件包解压出来,进行动态编译加载插件。

系统框架也支持停止和卸载插件。如下图:

 

  6、海量文档资料+全文搜索插件

文档管理插件支持office等文档在线浏览以及文件转换,把文档转换成HTML文件,支持全文解析和全文搜索功能

进在开发中。。。。。。。。

  7、微信公共帐号订制插件

进在开发中。。。。。。。。

  8、待续…..

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤 - ymnets - 博客园

mikel阅读(1623)

来源: 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(45)-工作流设计-设计步骤 – ymnets – 博客园

系列目录

步骤设计很重要,特别是规则的选择。

我这里分为几个规则

1.按自行选择(在起草时候自行选审批人,比较灵活)

2.按上级(无需指定,当时需要知道用户的上司是谁,可以在职位管理设置,或者在用户表直接设置)

3.按职位(选择职位,直接获得该职位的人员)

4.按部门(按部门,直接获得该部分的人员)

5.按人员(设置步骤时就指定人员)

以上用户必须和部门,职位,上级有所关联,只要做好一个其实全部都同理

表结构分析:Flow_FormStep中有IsAllCheck字段我设计这个的目的是批量审核,比如我选择了部门,那么这个步骤要全部门的人都审核通过才算通过否则其中一人审核即可

先创建一个新的表单,必须有新的表单才能设置步骤

OK,新建好表单的字段之后,就可以设置步骤了

步骤设置很简单,就是一个从表关系,对应了表单的ID。从表可以直接简单看出关系,但设计其实比较有复杂,当选择组织架构,按职位,按指定人。都必须弹出窗口来进行选择,所以还要设计多3个弹出窗口,我这里只设计按人员筛选为例,因为按人员之前在权限管理的角色组管理已经实现

我这里“又”设计成了一个手风琴,具体实现如下

新建步骤和修改步骤=设计步骤

核心Action

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode.gif" alt="复制代码" /></a></span></div>
<pre>[SupportFilter(ActionName = "Edit")]
        public ActionResult EditStep(string id)
        {
            ViewBag.Perm = GetPermission();
            Flow_FormModel flowFormModel = m_BLL.GetById(id);
            List&lt;Flow_StepModel&gt; stepList = stepBLL.GetList(ref setNoPagerDescBySort, flowFormModel.Id);//获得全部步骤
            foreach (var r in stepList)//获取步骤下面的步骤规则
            {
                r.stepRuleList = GetStepRuleListByStepId(r.Id);
            }
            flowFormModel.stepList = stepList;//获取表单关联的步骤
            ViewBag.Form = flowFormModel;
            Flow_StepModel model = new Flow_StepModel();
            model.FormId = flowFormModel.Id;
            model.IsEditAttr = true;
            return View(model);
        }

     

        [HttpPost]
        [SupportFilter(ActionName = "Edit")]
        public JsonResult EditStep(Flow_StepModel model)
        {
            model.Id = ResultHelper.NewId;
            if (model != null &amp;&amp; ModelState.IsValid)
            {

                if (stepBLL.Create(ref errors, model))
                {
                    LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name, "成功", "创建", "Flow_Step");
                    return Json(JsonHandler.CreateMessage(1, Suggestion.InsertSucceed, model.Id));
                }
                else
                {
                    string ErrorCol = errors.Error;
                    LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",Name" + model.Name + "," + ErrorCol, "失败", "创建", "Flow_Step");
                    return Json(JsonHandler.CreateMessage(0, Suggestion.InsertFail + ErrorCol));
                }
            }
            else
            {
                return Json(JsonHandler.CreateMessage(0, Suggestion.InsertFail));
            }
        }

完整EditStep.cshtml代码

</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码"><img src="http://www.mikel.cn/wp-content/uploads/2015/05/copycode.gif" alt="复制代码" /></a></span></div>
<pre>@model App.Models.Flow.Flow_StepModel
@using App.Common;
@using App.Models.Flow;
@using App.Admin;
@using App.Models.Sys;
@{
    ViewBag.Title = "创建";
    Layout = "~/Views/Shared/_Index_LayoutEdit.cshtml";
    List&lt;permModel&gt; perm = (List&lt;permModel&gt;)ViewBag.Perm;
    if (perm == null)
    {
        perm = new List&lt;permModel&gt;();
    }
    Flow_FormModel formModel = (Flow_FormModel)ViewBag.Form;
}
&lt;style&gt;
    .stepContent table td {
        padding: 3px;
    }

    .lineheight {
        line-height: 20px;
    }
&lt;/style&gt;
&lt;script type="text/javascript"&gt;
    $(function () {
        $(".icon-delete").click(function () {
            if ($(this).next("a").attr("class") == "accordion-collapse accordion-expand") {
                $(this).next("a").trigger("click");
            }
        });
        $("#FlowRule").change(function () {
            $("#Execution").val("");
            $("#ExecutionName").val("");
            if ($("#FlowRule").val() == "上级" || $("#FlowRule").val() == "自选") {
                $("#ruleExecution").hide();
            } else if ($("#FlowRule").val() == "职位") {
                $("#selExc").html("审批职位");
                $("#ruleExecution").show();
            }
            else if ($("#FlowRule").val() == "部门") {
                $("#selExc").html("审批部门");
                $("#ruleExecution").show();
            } else if ($("#FlowRule").val() == "人员") {
                $("#selExc").html("审批人员");
                $("#ruleExecution").show();
            }
        });
        $("#selExc").click(function () {
            var html = $("#selExc").html()
            if (html == "审批人员") {
                $("#modalwindow").html("&lt;iframe width='100%' height='100%' scrolling='no' frameborder='0'' src='/SysHelper/UserLookUp'&gt;&lt;/iframe&gt;");
                $("#modalwindow").window({ title: '选择人员', width: 620, height: 388, iconCls: 'icon-add' }).window('open');
            } else if (html == "审批职位") {
                $("#modalwindow").html("&lt;iframe width='100%' height='100%' scrolling='no' frameborder='0'' src='/SysHelper/PosMulLookUp'&gt;&lt;/iframe&gt;");
                $("#modalwindow").window({ title: '选择职位', width: 620, height: 388, iconCls: 'icon-add' }).window('open');
            } else if (html == "审批部门") {
                $("#modalwindow").html("&lt;iframe width='100%' height='100%' scrolling='no' frameborder='0'' src='/SysHelper/DepMulLookUp'&gt;&lt;/iframe&gt;");
                $("#modalwindow").window({ title: '选择部门', width: 320, height: 300, iconCls: 'icon-add' }).window('open');
            }
        });
    });

    var idx = @(formModel.stepList.Count());
    function Create() {
        if ($("form").valid()) {
            $.ajax({
                url: "@Url.Action("EditStep")",
                type: "Post",
                data: $("form").serialize(),
                dataType: "json",
                success: function (data) {
                    var stepId = data.value;
                    var currentIDX = idx + 1;
                    $('#stepList').accordion('add', {
                        title: '第 ' + (idx + 1) + ' 步',
                        iconCls: 'pic_244',
                        content: '&lt;div class="stepContent" style="padding:5px"&gt;&lt;table class="wid100f"&gt;&lt;tr&gt;&lt;td style="width:100px;" class="tr"&gt;步骤名称:&lt;/td&gt;&lt;td&gt;'+$("#Name").val()+'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr"&gt;步骤说明:&lt;/td&gt;&lt;td&gt;'+$("#Remark").val()+'&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;',
                        tools: [{
                            iconCls: 'icon-delete',
                            handler: function (i) {
                                DeleteStep(stepId);
                            }
                        }]
                    });
                    idx++;
                    $("#Sort").val(idx);
                    $(".icon-delete").click(function () {
                        if ($(this).next("a").attr("class") == "accordion-collapse accordion-expand") {
                            $(this).next("a").trigger("click");
                        }
                    });
                }
            });
        }
    }
   
    function DeleteStep(stepId)
    {
        $.messager.confirm('提示', '你要删除当前步骤及条件吗?', function (r) {
            if (r) {
                $.post("@Url.Action("DeleteStep")?id=" + stepId, function (data) {//从数据库删除
                    if (data.type == 1)
                    {
                        var pp = $('#stepList').accordion('getSelected');
                        if (pp) {
                            var index = $('#stepList').accordion('getPanelIndex', pp)
                   
                            $('#stepList').accordion('remove', index);
                            idx--;
                            //删除后需要重新设置标题
                            $("#stepList .panel .panel-title").each(function (i) {
                                $(this).html('第 ' + (i + 1) + ' 步');
                            })
                        }
                        $.messageBox5s('提示', data.message);
                    }
                }, "json");
               
            }
        });
    }

    function SetSelResult(result,resultName)
    {
        
        $("#Execution").val(result);
        $("#ExecutionName").val(resultName);
    }
    function GetSelResult()
    {
        var arrayObj = new Array()
        arrayObj[0]= $("#Execution").val();
        arrayObj[1]= $("#ExecutionName").val();
        return arrayObj;
    }
    //ifram 返回
    function frameReturnByClose() {
        $("#modalwindow").window('close');
    }
&lt;/script&gt;
&lt;div id="modalwindow" class="easyui-window" data-options="modal:true,closed:true,minimizable:false,shadow:false"&gt;&lt;/div&gt;


&lt;table style="height: 393px;"&gt;
    &lt;tr&gt;
        &lt;td style="width: 480px; border-right: 1px #ccc solid; vertical-align: top"&gt;
            @using (Html.BeginForm())
            {
                @Html.HiddenFor(model =&gt; model.FormId)
                @Html.HiddenFor(model =&gt; model.Sort)
                &lt;table class="fromEditTable setTextWidth100" style="width: 100%"&gt;
                    &lt;tbody&gt;
                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;表单名称:
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.DisplayFor(model =&gt; formModel.Name)
                            &lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.Name):
                            &lt;/td&gt;
                            &lt;td&gt;
                                @Html.EditorFor(model =&gt; model.Name)
                            &lt;/td&gt;
                            &lt;td&gt;@Html.ValidationMessageFor(model =&gt; model.Name)&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.Remark):
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.TextAreaFor(model =&gt; model.Remark, new { @style = "width:330px;height:50px" })
                            &lt;/td&gt;

                        &lt;/tr&gt;

                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.FlowRule):
                            &lt;/td&gt;
                            &lt;td&gt;
                                &lt;select id="FlowRule" name="FlowRule"&gt;
                                    &lt;option value="自选"&gt;自行指定人&lt;/option&gt;
                                    &lt;option value="上级"&gt;按上级&lt;/option&gt;
                                    &lt;option value="职位"&gt;按职位&lt;/option&gt;
                                    &lt;option value="部门"&gt;按部门&lt;/option&gt;
                                    &lt;option value="人员"&gt;按人员&lt;/option&gt;
                                &lt;/select&gt;
                            &lt;/td&gt;
                            &lt;td&gt;@Html.ValidationMessageFor(model =&gt; model.FlowRule)&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr id="ruleExecution" style="display: none"&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.Execution):
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.HiddenFor(model =&gt; model.Execution)
                                &lt;input id="ExecutionName" disabled="disabled" type="text" style="width: 200px" /&gt;
                                &lt;a class="icon-add" id="selExc" href="#" &gt;&lt;/a&gt;
                            &lt;/td&gt;
                            &lt;td&gt;@Html.ValidationMessageFor(model =&gt; model.Execution)&lt;/td&gt;
                        &lt;/tr&gt;
                       
                        &lt;tr style="display:none"&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.IsAllCheck):
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.CheckBoxFor(model =&gt; model.IsAllCheck, new { @checked = "checked" })
                                &lt;span class="gray"&gt;当规则或者角色被选择为多人时候,是否启用多人审核才通过&lt;/span&gt;
                            &lt;/td&gt;

                        &lt;/tr&gt;

                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.CompulsoryOver):
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.CheckBoxFor(model =&gt; model.CompulsoryOver)
                                &lt;span class="gray"&gt;审核人是否可以强制完成整个流程&lt;/span&gt;
                            &lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;
                                @Html.LabelFor(model =&gt; model.IsEditAttr):
                            &lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                @Html.CheckBoxFor(model =&gt; model.IsEditAttr)
                                &lt;span class="gray"&gt;审核者是否可以编辑发起者的附件&lt;/span&gt;
                            &lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr&gt;
                            &lt;td style="width: 100px; text-align: right;"&gt;&lt;/td&gt;
                            &lt;td colspan="2"&gt;
                                &lt;a href="javascript:Create()" class="easyui-linkbutton" data-options="iconCls:'icon-add'"&gt;添加步骤&lt;/a&gt;
                            &lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/tbody&gt;
                &lt;/table&gt;
            }

        &lt;/td&gt;
        &lt;td style="width: 414px;"&gt;
            &lt;div id="stepList" class="easyui-accordion" data-options="animate:false" style="width: 414px; height: 393px; overflow-y: auto; border: 0px;"&gt;
                @for (int i = 0; i &lt; formModel.stepList.Count(); i++)
                {
                    &lt;div title="第 @(i + 1) 步" data-options="iconCls:'pic_244'
                        ,tools: [{
                            iconCls: 'icon-delete',
                            handler: function (i) {
                                 DeleteStep('@(@formModel.stepList[i].Id)');
                                
                            }
                        }]"&gt;
                        &lt;div class="stepContent" style="padding: 5px"&gt;
                            &lt;table class="wid100f"&gt;
                                &lt;tr&gt;
                                    &lt;td style="width: 100px;" class="tr"&gt;步骤名称:&lt;/td&gt;
                                    &lt;td&gt;@formModel.stepList[i].Name&lt;/td&gt;
                                &lt;/tr&gt;
                                &lt;tr&gt;
                                    &lt;td class="tr"&gt;步骤说明:&lt;/td&gt;
                                    &lt;td&gt;@formModel.stepList[i].Remark&lt;/td&gt;
                                &lt;/tr&gt;
                            &lt;/table&gt;
                         
                        &lt;/div&gt;
                    &lt;/div&gt;
                }
            
            &lt;/div&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

代码分析,控制器中的删除,修改,直接复制代码生成器生成的即可。

ActionResult EditStep,返回Flow_Step模型的同时也返回了Flow_Form的模型。

我修改了Flow_FormModel,让他支持自己的从表关系,必须添加以下2段即可

public List<Flow_FormAttrModel> attrList { get; set; }
public List<Flow_StepModel> stepList { get; set; }

注:本节一点悬念和技术点都没有,就是一个主表和从表的关系,只不过我是换了另一种方式来显示罢了

 

作者:YmNets
出处:http://ymnets.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

ASP.NET MVC 5系列 (七)邮件服务器与客户端 - >>王刚 - 博客园

mikel阅读(895)

来源: ASP.NET MVC 5系列 (七)邮件服务器与客户端 – >>王刚 – 博客园

目录:

一、概述

二、MX设置

三、使用系统的SMTP功能发邮件

四、使用hMailServer收发邮件

五、Web邮件客户端

一、概述

首先必须清楚SMTP才是提供邮件服务器的核心,收发邮件全靠SMTP。不信你关掉hMailServer的POP3和IMAP,服务器照样可以收 发邮件。POP3和IMAP只是邮件服务器实现的用于提供邮件客户端收取和管理邮件的两种协议,其中POP3协议只能收取服务器上的邮件,而IMAP协议 可供客户端管理服务器上的邮件。目前几乎所有的第三方服务器的SMTP都限制了发送配额等各种限制,并且几乎所有的邮件服务器都会检测发送方的域名和IP 是否匹配。简单说就是别用第三方的进行测试,也别用自建的locahost发邮件测试,到底怎么测试呢?在非服务器环境下的邮件发送测试,有3种方案:

(1)模拟邮件的发送,不真正发送邮件。把邮件发送的内容写到日志文件等。

(2)模拟邮件的接收。使用localhost的SMTP发送邮件。使用SMTP4DEV等拦截接收邮件,配合windows live mail和Windows MBox Viewer等可以读取eml格式的客户端,可以得到正确格式的邮件,收件方不会接收到邮件。

(3)在有域名和服务器可用的前提下,设置域名MX并搭建邮件服务器,通过邮件服务器的SMTP进行邮件的实际发送。可以通过收件方服务器的域名IP检测,但要配置好安全措施防止邮件服务器被利用。

发送邮件可以使用Windows Server 2008+的系统的SMTP功能,但没有提供对POP3和IMAP协议的系统支持,因此无法使用客户端访问邮件服务器。

如果我们希望使用客户端访问邮件服务器,在Windows Server 2008+环境下和开源免费的前提下,目前最好的选择就是hMailServer。如果你打算切换到hMailServer,一定要记得停用系统的SMTP服务。否则hMailServer无法监听SMTP端口,就无法接收到邮件。

二、MX设置

MX设置的参考如下,在域名解析中配置:

在服务上检查MX设置:

三、使用系统的SMTP功能发邮件:

以Windows Server 2008为例,SMTP功能的安装和服务的设置比较简单,这里省略。

1.域名配置:

首先是域名:在传递—>高级中 设置

2.IP配置

3.通过.NET发送邮件:
web.config配置:

发送代码:

四、使用hMailServer收发邮件:

hMailServer的安装和汉化自行搞定。这里一定要记住,使用hMailServer必须同时使用SMTP和POP3,并且停止系统自带的SMTP服务,否则无法接收邮件。
1.添加域名:
2.添加账号:
3.配置邮件递交:
4.绑定IP:
5.配置IP范围:
图中的Auto-ban是由于我的密码过于简单并且在测试时的失败造成hMailServer自动屏蔽了服务器的IP,因此需要对该条限制进行配置。其他情况下不需要这个步骤。
6.测试配置:

五、Web邮件客户端

客户端收发邮件可以采用CS模式的Outlook Express和FoxMail,也可以采用163等BS模式的Web邮箱提供的代收功能接收邮件。hMailserver提供了邮件服务器的发送和接收邮件功能,并同时提供POP3和IMAP协议的支持。开源免费的Web邮件客户端,非.NET的Web邮件客户端实现较多,常用的如PHP的SquirrelMail和RoundCube。.NET下的Web邮件客户端少的可怜,但实现相关收取协议组件库还是不缺的。有时候需要在后台中集成邮件的管理功能,可以直接使用这些组件,如ImapX等。
1.集成邮件列表功能:
2.标记已读未读:
3.删除邮件:
4.界面参考:
发送邮件和回复邮件涉及到通讯录、草稿和附件等要相对复杂一些,看需求是否有必要集成完整的功能,毕竟组件库已经提供了完整的功能,我们只需要 对其包装和调用,配合界面操作就可以了,其中构建一个完善的支持Ajax的Web客户端界面的难点不在后台实现上,而在前台,与主题关系不大。有兴趣的可 以自己实现。
随笔里的文章都是干货,都是解决实际问题的,这些问题我在网上找不到更好的解决方法,才会有你看到的这一篇篇随笔,因此如果这篇博客内容对您稍有帮助或略有借鉴,请您推荐它帮助更多的人。如果你有提供实际可行的更好方案,请推荐给我。

简单制作 OS X Yosemite 10.10 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)下载 | 异次元软件

mikel阅读(778)

伴随着 iMac 5K Retina 和新的 Mac mini 等硬件的发布,苹果终于都推出了 OS X Yosemite 系统正式版了!相信很多人都已经用上。不过对于一些不……

来源: 简单制作 OS X Yosemite 10.10 正式版U盘USB启动安装盘方法教程 (全新安装 Mac 系统)下载 | 异次元软件

伴随着 iMac 5K Retina 和新的 Mac mini 等硬件的发布,苹果终于都推出了 OS X Yosemite 系统正式版了!相信很多人都已经用上。不过对于一些不想升级,而是打算「全新安装」系统的朋友却遇到一个小问题。

那就是怎样制作 OS X Yosemite 正式版 的U盘启动安装盘?其实方法比较简单,下面我们就给大家带来一个制作 Yosemite U盘启动盘/安装盘的教程吧。这样以后想给 Mac 重装系统、在没有网络的情况下或者帮多台机器安装系统都方便得多……

简单制作 Mac OS X Yosemite 正式版 USB 启动盘的方法教程:

其实制作 OS X Yosemite 正式版 USB 启动盘的方法有很多,譬如使用命令行的,也有使用第三方工具的。这个教程主要介绍前者,因为这是目前我了解到的最稳妥、简单,而且没有兼容性问题的方法了。

制作 Yosemite U盘安装盘

不过大家可别被「命令行」三个字吓到,其实你只需按步骤来,复制粘贴命令即可快速完成,事实上是很简单的。

一、准备工作:

  1. 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据)
  2. 从这里下载苹果官方 OS X Yosemite 正式版的安装程序 (可选 AppSotre 或网盘下载)
  3. 如果你是从 Mac AppStore 下载的,下载完成后安装程序可能自动开始,这时先退出安装
  4. 如从网盘下载的,请将解压后获得的 “Install OS X Yosemite.app” (显示为 “安装 OS X Yosemite.app”) 移动到「应用程序」文件夹里面

二、格式化 U 盘:

插入你的 U 盘,然后在「应用程序」->「实用工具」里面找到并打开「磁盘工具」,或者直接用 Spotlight 搜索 “磁盘工具” 打开,如下图。

格式化U盘

  • 1 – 在左方列表中找到 U 盘的名称并点击
  • 右边顶部选择 2 -「分区」,然后在 3 -「分区布局」选择「1个分区」
  • 在分区信息中的 4 -「名称」输入「iPlaySoft」 (由于后面的命令中会用到此名称,如果你要修改成其他(英文),请务必对应修改后面的命令)
  • 在「格式」中选择 5 -「Mac OS 扩展 (日志式)」
  • 这时,先别急着点“应用”,还要先在 6 -「选项」里面,如下图

GUID 分区表

  • 选择「GUID 分区表」,然后点击「好」
  • 最后再点「应用」开始对 U 盘进行格式化。

三、输入终端命令开始制作启动盘:

  • 请再次确保名为 “安装 OS X Yosemite” 的文件是保存在「应用程序」的目录中
  • 在「应用程序」->「实用工具」里面找到「终端」并打开。也可以直接通过 Spotlight 搜索「终端」打开
  • 复制下面的命令,并粘贴到「终端」里,按回车运行:

sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia –volume /Volumes/iPlaySoft –applicationpath /Applications/Install\ OS\ X\ Yosemite.app –nointeraction

回车后,系统会提示你输入管理员密码,接下来就是等待系统开始制作启动盘了。这时,命令执行中你会陆续看到类似以下的信息:

Erasing Disk: 0%… 10%… 20%… 30%…100%…
Copying installer files to disk…
Copy complete.
Making disk bootable…
Copying boot files…
Copy complete.
Done.

当你看到最后有 「Copy complete」和「Done」 字样出现就是表示启动盘已经制作完成了!

四、U 盘启动安装 OS X Yosemite 的方法:

当你插入制作完成的 OS X Yosemite U盘启动盘之后,桌面出现「Install OS X Yosemite」的盘符那么就表示启动盘是正常的了。那么怎样通过 USB 启动进行全新的系统安装呢?

其实很简单,先在目标电脑上插上 U 盘,然后重启你的 Mac,然后一直按住「option」(alt) 按键不放,直到屏幕显示多出一个 USB 启动盘的选项,如下图。

Yosemite USB盘启动

这时选择 U 盘的图标回车,即可通过 U 盘来安装 Yosemite 了!这时,你可以直接覆盖安装系统(升级),也可以在磁盘工具里面格式化抹掉整个硬盘,或者重新分区等实现全新的干净的安装。

天涯还能走多远

mikel阅读(860)

最近站长圈里天涯论坛的转股和上市的消息沸沸扬扬,赔钱赔得去上市和转股了,不过天涯能否扭亏为盈,都将是众人瞩目的问题,一个老牌的传统论坛总是有很多人气的,人们都是又爱又恨的关注着事态发展。

很多人分析天涯论坛的亏损原因,又纷纷讨论天涯未来的发展问题,嫣然自己成了天涯的ceo纷纷出谋划策的想办法扭亏为盈,可是都是站着说话不腰疼的。

结果论坛还是转股了,上市不上市不要紧,赚钱才是硬道理,不盈利谁会接这个盘,谁又会敢站出来说能够带领着天涯走过阴霾?能够有这么一个人走出来,估计传统论坛的转型之路也就通了。

有人谣传天涯有搞金融众筹,可总感觉不伦不类的,一个论坛和金融嫁接起来,真的没有先例,没有做还真没准儿能行。毕竟人气是有了,差的就是变现了,可一般泡论坛的都是什么人?能不能投入到金融里面就不得而知了,只能走着看了。

互联网就是这么快,仅仅两年就让天涯步履瞒珊的走上了融资和上市的道路,这是一个多变的世界。