精易论坛

标题: android 网络通信基础Socket (一) [打印本页]

作者: 945426557    时间: 2015-8-23 12:52
标题: android 网络通信基础Socket (一)
首先画界面 : 一个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);}

==============================完整代码如下===============================
[attach]444342[/attach]
====================================
结果图:
[attach]444344[/attach][attach]444343[/attach]



作者: zjwanywn    时间: 2015-8-24 08:56
很好的教程,希望楼主多多发这样的教程!
作者: sarmanliao    时间: 2015-9-1 16:44
新生路过,对什么都有兴趣,学习一下。
作者: bm123    时间: 2015-12-18 18:58
我是第一次接触socket,感觉有点吃力,有没有再基础点的教程,因为英语不好,看着有点吃力了,楼主莫笑
作者: liuaolan    时间: 2016-9-11 12:13
这是用什么写的/?
作者: 风过长街    时间: 2016-9-12 22:49
最近想学APP算法解密,来找下资源         
作者: 泪无言    时间: 2016-9-16 21:18
有点看不懂
作者: 冷水泡面    时间: 2016-11-2 02:12
好复杂噢~思路有点乱
作者: Youlor    时间: 2016-11-26 18:58
新人感谢分享,多多关照!
作者: ncdark    时间: 2016-12-4 12:03
学习了 。
作者: 月儿弯弯    时间: 2017-5-3 18:16
顶一个




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4