首页/安卓逆向/ android 网络通信基础Socket (一)

android 网络通信基础Socket (一)

作者:神奇   分类:安卓逆向   时间:2018-04-30 18:42:39  标签:


首先画界面 : 一个TextView 一个Button 
接着是权限:<uses-permission  android:name="android.permission.INTERNET"/> 需要给你的APP一个访问网络的权限
一个易语言服务器 IP地址:192.168.1.181 端口:8866
新手教程大神勿喷,不惜勿喷...
需要的命令:
     Socket socket =new Socket ("192.168.1.181",8866);  首先实例化一个Socket 函数 也就相当于易语言的 客户Duan.连接(IP地址,端口) ;
     它需要抛出一个异常 判断服务器是否连接或者权限问题等等。。
      ============接收数据
      InputStream in =socket.getInputStream();                            获取数据流,获取服务器给客户Duan发送的数据 相当于易语言的 客户Duan.取回数据();
      byte[] data =new  byte[1024] ;                                             创建一个字节组 也相当于字节集
      in.read(data);                                                                         把数据流获得到的数据给附加给data
      String txt =new String(data,"GBK");                                       android 的字体编码和PC 的字体编码不一样所以要转换一下编码
       TextView text=(TextView)findViewById(R.id.text);                 获取一个标签
       text.settext(txt);                                                                   用标签返回服务器发送的数据
       如果 InputStream 没有获取到数据它会一直等下去知道数据发送来为止,但是这样问题就出来了。如果太长时间未获得数据,会导致程序挂掉,未响应。while(ture) 也无法一直获取服务器发送信息。                                 下一次讲 多线程的客户Duan
      ============发送数据
      OutputStream out =socket.getOutputStream();                     获取发送数据流  
       out.write("user:load....".getBytes());                                       把要发送的内容转换成字节集   相当于 易语言的  客户Duan.发送数据();
       其实获取数据流的方法有很多种这是比较简单的一种
------------------------------------------------------------------------------------------------------------
常见小问题:
                权限给啦,代码也正确但是一点连接就出现错误。原因如下
一个APP如果在主线程中请求网络操作,将会抛出此异常。Android这个设计是为了防止网络请求时间过长而导致界面假死的情况发生。
    方法简单,强制使用。一定要加到
 setContentView(R.layout.main); 下面
         if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
            StrictMode.setThreadPolicy(policy);}
        if (android.os.Build.VERSION.SDK_INT > 9) { 
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy);}

==============================完整代码如下===============================
 0.jpg
====================================
结果图:
0.jpg0.jpg
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code