Android开发局域网通信软件笔记
(1)控制WIFI,获取WIFI信息
- WifiManager = (WifiManager)WIfi_ActivityActivity.this.getSystemService(Service.WIFI_SERVICE);
- WifiManager.setWifiEnabled(true);
- System.out.println("wifi state ======>"+WifiManager.getWifiState());
- state.setText("当前WIFI网卡状态为"+WifiManager.getWifiState());
<1>发送UDP数据报
- try {
- DatagramSocket socket = new DatagramSocket(9090);
- InetAddress serverAdd = null;
- try {
- serverAdd = InetAddress.getByName("192.168.1.102");
- } catch (UnknownHostException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- byte[] msg = sendmsg.getText().toString().getBytes();//获取输入框中输入的内容并转换成msg
- DatagramPacket packet = new DatagramPacket(msg,msg.length,serverAdd,9090);
- try {
- socket.send(packet);
- socket.close();
- sendmsg.setText("");;
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } catch (SocketException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
<2>int to IP
int ——> IP:
- 将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。
- 将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。
- 将整数值进行右移位操作(>>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。
- 将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。
- private String intToIp(int i) {
- return (i & 0xFF ) + "." +
- ((i >> 8 ) & 0xFF) + "." +
- ((i >> 16 ) & 0xFF) + "." +
- ( i >> 24 & 0xFF) ;
- }
注意:这里用到了强制类型转换,把int类型转换成string,java里面没有类似C语言的直接在变量前加所需要转换的方法,因为java里面int,string都是类,不能直接转换,这里用了一个方法就是int+".",这样自动把int类型转换为了string类型,得到我们需要的信息了。
<3>局域网在线主机列表刷新方法
这个想了一段时间,最后想到一个办法,就是在每个客户端在发送询问是否在线的广播前,清空自己的局域网主机列表,然后等待局域网内主机的响应,收到一个就在列表中添加一个信息,询问广播每隔一段时间发送一次。
<3>(转)什么是套接字?
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。
生成套接字,主要有3个参数:通信的目的IP地址、使用的传输 层协议(TCP或UDP)和使用的端口号。Socket原意是“插座”。通过将这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。如图1:
![](http://imgblog.china.com/u/070127/28894/pic/11783766264141.jpg)
Host A上的程序A将一段信息写入Socket中,Socket的内容被Host A的网络管理软件访问,并将这段信息通过Host A的网络接口卡发送到Host B,Host B的网络接口卡接收到这段信息后,传送给Host B的网络管理软件,网络管理软件将这段信息保存在Host B的Socket中,然后程序B才能在Socket中阅读这段信息。
要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为serverSocket。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连 接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客 户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。