根据之前的经验,应用软件的网络通信无非就是Socket和HTTP,其中Socket又可以用TCP和UDP,HTTP的话就衍生出很多方式,基础的HTTP GET和POST请求,然后就是WebService的SOAP。

在这些方式中,Socket当然是最基础的。因此先从Socket开始。

服务端就不需要过多的说明了,无论采用什么语言什么平台都可以,只要遵循基本的Socket监听模式就行。

实际上Android的Socket开发就是Java的Socket开发,因此学习过Java的开发人员也许觉得并没有什么难度,不过依然有一些不同于PC开发的地方需要注意

首先是说说TCP开发

JAVA里的TCP开发感觉比C#里简单多了,实现方法几句话就能完成。

01  Socket socket = newSocket("192.168.3.119",7628);//创建Socket实例,并绑定连接远端IP地址和端口0203  OutputStream ops = socket.getOutputStream();//定义一个输出流,来自于Socket输出流0405  byte[] bytes = b.getBytes();0607  ops.write(bytes);//向输出流中写入数据0809  ops.flush();//刷行输出流1011  //至此,在连接成功的情况下,服务端应该就能收到发送过去的流了。121314  //接下来是接收服务器发送过来的数据15  InputStream ips = socket.getInputStream();//定义输入流,来自于socket的输入流1617  byte[] bytes2 = newbyte[20];1819  ips.read(bytes2);//读取输入流数据2021  String str = newString(bytes2);//转换成字符串2223  btn.setText(str);//显示出来(我是现实在button上,当然,这个方法不正规,不过可以让我少放点空间,看上去界面干净点,只要能看到效果就行)2425  socket.close();


服务端代码就不多说明了,只要实现了Socket监听和接收,发送就行。这样Android上Tcp的Socket就完成了,很简单。

接下来是UDP的,理论上来说,UDP的实现应该更简单,不过,由于使用模拟器来调试的关系,出了一点小问题,郁闷了很久,另外,Java用UDP Socket对应使用的类是DatagramSocket,与C#不同,c#是在创建Socket的时候制定参数来制定协议类型,先看代码。

01  DatagramSocket dgs = newDatagramSocket();//建立一个Socket,这个Socket将作为一个发送器,将Socket包发送出去02 03  InetAddress inet = InetAddress.getByName("192.168.3.119");//创建一个InetAddress,ip地址为要发动到的远端的服务器IP04 05  DatagramPacket dgp = newDatagramPacket("test2".getBytes(),"test2".getBytes().length,inet,7628);//创建一个UDP数据包,数据包包含远端的IP地址及端口06 07  dgs.send(dgp);//发送  08 09  dgs.close();10 11 12  DatagramSocket dgs2 = newDatagramSocket(9997);//创建另一个UDPSocket,13 14  DatagramPacket dgp2 = newDatagramPacket(newbyte[20],20); //创建一个空报文包15  dgs2.receive(dgp2);//接收数据并填充到报文包中16 17  String str = newString(dgp2.getData());//获取报文包里的数据并转换成字符串18 19  btn.setText(str);//显示获得的数据20 21  dgs2.close();//关闭Socket

需要特别注意的地方,在不做端口映射的情况下,UDP可能无法接受到服务器端发送过来的数据,原因是使用eclipse开发的时候,调试程序是用的模拟环境,模拟环境下,接收数据是要做端口映射的,因为模拟环境下,没有自己真实的IP地址和端口,模拟器是使用5554来运行的,发送数据到PC没问题,但是 PC发送到模拟器的时候,需要把本机的端口映射到模拟器上,真机环境不需要,具体操作方式如下

1、运行模拟器
2、打开DOS命令行窗口
执行:telnet localhost 5554
5554是模拟器的端口,执行之后会进入android console
3、 在console下执行:
redir add udp :8000:9000
其中,第一个端口号是PC的端口,第二个端口号是模拟器端口。
执行此命令之后,会把PC 8000端口接收到的数据转到模拟器的9000端口,模拟器就能从9000端口接收UDP数据包了

另外,要实现Socket,必须在 AndroidManifest.xml 中加入权限如下

1 <uses-permissionandroid:name="android.permission.INTERNET"/>

文章出处: http://blog.sina.com.cn/s/blog_685790700100xjuo.html


更多相关文章

  1. android之cursor
  2. Android通过Aidl调用Service实例
  3. Android解析中国天气接口JSon数据,应用于天气查询
  4. 从MediaStore获取制定文件夹下的视频信息
  5. 关于android的ListView的getCheckItemIds无法准确得到被选checkb
  6. 我的Android我做主
  7. 了解android应用开发的更多方面有更好的认识
  8. 最好的5个Android(安卓)ORM框架
  9. 【第一行代码笔记】(一)

随机推荐

  1. android获取手机屏幕的宽度及高度
  2. 短信拦截
  3. 类似股票的实时动态折线图
  4. Android通过代码自动连接WiFi
  5. Android service: startService的代码实
  6. Android TextView自定义选中弹出菜单记笔
  7. 【Android】创建Popwindow弹出菜单的两种
  8. Android开发者指南(10) —— Android(安
  9. Android自带语音播报
  10. android java 文件的读写