接着是权限:<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);}
==============================完整代码如下===============================
====================================
结果图:
发表评论: