【Android】socket局域网通信

简介: 我有一段时间特别想实现一个短距离的手机交互软件,比如多人联机小游戏app或者是多人文件共享app等,思来想去,得出了两个方案,一个是使用手机自带的蓝牙设备,通过蓝牙技术实现两个手机的数据交换,而另一个就是使用socket了。蓝牙技术对于android的小伙伴来说并不陌生,传文件什么的常用到,而且网上资料也十分丰富,所以这里不详细说明。而socket则是网络通信的大神级工具,无论c语言也好j

我有一段时间特别想实现一个短距离的手机交互软件,比如多人联机小游戏app或者是多人文件共享app等,思来想去,得出了两个方案,一个是使用手机自带的蓝牙设备,通过蓝牙技术实现两个手机的数据交换,而另一个就是使用socket了。蓝牙技术对于android的小伙伴来说并不陌生,传文件什么的常用到,而且网上资料也十分丰富,所以这里不详细说明。而socket则是网络通信的大神级工具,无论c语言也好java语言也好,socket通信真的是网络通信技术中的基础中的基础。作为java的扩展,android同样能十分方便地实现socket通信。下面就一个简单的例子来说明在android中如何使用socket进行通信(这里基于的是TCP协议)

这里,我们根据socket的原理,首先要有两个端,分别是服务端A和客户端B。A需要设定自己监听的端口号,而B需要知道的是A的IP地址以及A的端口号。一次网络请求是由B发起的,在A同意连接之后,双方就可以建立其一条socket双向数据通道。对于android,我们可以完全套用java的那一套。为了方便手机间通讯的测试,首先我们需要先准备两台手机,或者是一台是手机,另一个是电脑上的android emulator也可以。如果两台都是手机的话,那随便设定一台为服务端,一台为客户端就可以了;而如果一台是手机一台是模拟器的话,最好手机端作为服务端,模拟器端作为客户端,如果开着防火墙的话,需要先关掉。另外一点需要准备的是,先关掉两台手机的数据流量,开启其中一台手机的wifi热点功能,另一台连接到该wifi热点(这里另一个是模拟器的话,则该模拟器所在的电脑连到手机的wifi热点)。

然后需要设置网络权限,也就是在AndroidMaifest里面添加Internet权限:

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

之后我们需要知道服务端的IP地址,这个也难不倒我们,只需要在服务端调用以下代码:

public static String getLocalIpAddress(){ 
        
        try{ 
             for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
                 NetworkInterface intf = en.nextElement();   
                    for (Enumeration<InetAddress> enumIpAddr = intf   
                            .getInetAddresses(); enumIpAddr.hasMoreElements();) {   
                        InetAddress inetAddress = enumIpAddr.nextElement();   
                        if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) {   
                             
                            return inetAddress.getHostAddress().toString();   
                        }   
                    }   
             } 
        }catch (SocketException e) { 
            // TODO: handle exception 
            Log.i("", "WifiPreference IpAddress---error-" + e.toString());
        } 

        return null;  
    } 

 
就可以获取到本机的IP地址。在做第一次连接测试的时候,只需要拿到服务端A的IP地址就可以了。 

下面开始分别实现服务端和客户端的socket实现过程。

对于服务端,需要实现的步骤分别是:

1.实例化ServerSocket对象,并指定socket监听的端口号 : ServerSocket ss = new ServerSocket(port)

2.监听该端口,成功获取到连接后返回Socket对象: Socket s = ss.accept();

3.获取 读对象 : BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));

4.从远程读取一行数据: String line = new String(br.readLine().getBytes("UTF-8"));

5.获取 写对象 : PrintWriter pw = new PrintWriter(s.getOutputStream(),true);

6.传回数据 : pw.println(new String("SUCCESS"));


而对于客户端,需要实现的也十分简单,按照以下的步骤即可:

1.实例化Socket对象,指定IP和端口: Socket s = new Socket(IP,port);

2.设置连接方式和参数: s.setReuseAddress(true);s.setKeepAlive(true);

3.获取获取 写对象 : PrintWriter pw = new PrintWriter(s.getOuputStream(),true);

4.写入数据 : pw.println("hello this is obo!");

5.获取 读对象 : BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream));

6.从远程读取一行数据: String line = br.readLine();


按照以上的步骤进行的话,即可以进行简单的socket通信连接了。这里,读对象和写对象都是对输入输出流的处理,方法可以自己来决定。



目录
相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
3月前
|
网络协议 程序员 Python
揭秘Python网络编程:深入理解Socket通信
在当今信息时代,网络通信已经成为人们生活中不可或缺的一部分。而Python作为一种高效、易用的编程语言,自然也能够很好地支持网络编程和Socket通信。本文将介绍Python网络编程与Socket通信的相关知识,包括Socket通信模型、Socket编程接口、网络套接字等内容。
|
3月前
|
网络协议 开发者 Python
Python网络编程与Socket通信:连接世界的无限可能
在当今数字化时代,Python作为一种强大的编程语言,通过网络编程与Socket通信为我们打开了连接世界的无限可能。本文将深入探讨Python网络编程的基础知识、Socket通信的原理以及实际应用,帮助读者更好地理解并运用这一技术。
|
3月前
|
网络协议
【Netty 网络通信】Socket 通信原理
【1月更文挑战第9天】【Netty 网络通信】Socket 通信原理
|
5月前
|
存储 Cloud Native Linux
C++封装了socket通信类
C++封装了socket通信类
|
6月前
|
存储
14.10 Socket 套接字选择通信
对于网络通信中的服务端来说,显然不可能是一对一的,我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信,而当不需要与客户端通信时,则只需要将该套接字挂到链表中存储并等待后续操作,套接字服务端通过多线程实现存储套接字和选择通信,可以提高服务端的并发性能,使其能够同时处理多个客户端的请求。在实际应用场景中,这种技术被广泛应用于网络编程、互联网应用等领域。在服务端启动时,创建套接字并进行绑定,然后开启一个线程(称为主线程)用于监听客户端的连接请求。主线程在接收到新的连接请求后,会将对应的套接字加入一个数据结构(例如链表、队列、哈希表等)中进行存储。同时,主线程会将存储套接字的数据结构传递给
25 1
14.10 Socket 套接字选择通信
|
6月前
14.5 Socket 应用组播通信
组播通信是一种基于UDP协议的网络通信方式,它允许发送方将消息同时传递给多个接收方。在组播通信中,发送方和接收方都会加入一个共同的组播组,这个组播组对应一个特定的IP地址,所有加入该组播组的主机都能够接收到发送方发送的消息。组播通信可以有效地减少网络流量和网络负载,因为在传统的点对点通信方式下,每个消息都需要单独传输到每个接收方,而在组播通信中,每个消息只需要传输一次,就可以同时传递给多个接收方。在使用组播模式时,需要在套接字上使用`setsockopt()`函数来设置套接字的`IP_MULTICAST_IF`选项,指定本地主机的出站接口地址,用于发送组播数据包。此外,还可以设置`IP_ADD
66 0
14.5 Socket 应用组播通信
|
7月前
|
Java
Java的Socket进行通信
下面是一个使用Java的Socket进行通信的简单示例
|
21天前
|
网络协议 Unix Linux
Socket通信详细介绍1
Socket通信详细介绍
30 0