Android客户端与本地服务器Socket通信

本文介绍如何在Android客户端实现与本地服务器的Socket通信。文章强调了Android应用进行Socket通信时的三个关键要求:添加网络访问权限,非UI线程进行Socket操作,以及正确指定IP地址和端口号。通过示例代码展示了客户端发送数据到服务器,服务器接收并返回数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  现代生活中,我们的移动设备离不开网络,我们的APP也经常需要连接到网络,所以现在,在这里完成一个简单的Socket通信程序,实现Android客户端与本地的服务器通信。

  关于网络通信的知识,互联网上有很多相关的讲解,这里就不进行详细的讲解了,直接就代码进行讲解。

  需要注意的是,Android应用Socket通信时,有几点要求必须得遵守:

1. andriod客户端添加网络访问权限

  在写客户端程序时,必须要在Manifest.xml文件中添加网络访问权限,当然如果你愿意,也可以加上对WiFi状态进行查看的权限。

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

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

  当然,你不加这两条网络访问权限程序并不会抛出任何的异常,运行起来也并看不出有什么毛病,但是,程序结果肯定不对。之前用真机做过测试,不加这两条权限,在同一局域网内,手机是可以连接到服务器上的,只不过,在服务器端,得到连接的IP地址和服务器的IP是一样的,这可能只是偶然情况。
  如果不加这两条权限,客户端和服务器是不能进行通信的。

2.对Socket的操作放在非UI线程内进行

  在Android应用中,为了保证APP的用户体验,必须对用户的操作尽可能快的做出响应,因此在以前的Android版本中,不建议将耗时的操作放在UI线程中。到Android3.0之后的版本,则是更进一步做了限制,在非UI线程中禁止操作UI,在UI线程中禁止做响应时间长的操作,如联网操作。

   如果在UI线程中进行联网操作的话,会抛出NetworkOnMainThread异常,因此,Socket操作必须放在子线程内进行。

3.要使用正确的IP地址和端口号

  Socket通信,必须指定IP地址和端口号,需要注意的是端口号不能随便分配。

  端口号的范围是0~65535,1024一下的端口被系统分给了一些服务,慎用(建议不要使用这段范围的端口),还有一些端口被分配给了特定的服务,比如http的8080端口,其他的端口应该都没有太大问题。

  在cmd窗口执行netstat -ano命令可以看到所有端口的使用情况。

  对于IP地址,有两种情况要注意。

  如果使用真机进行调试,手机必须和电脑在同一个网段内,可以连接同一个wifi,也可以用电脑开一个无线热点,手机连上热点就行,无论哪种方式,要求手机和电脑都能上网,否则,也是无法通信的。然后,程序中新建一个Socket的时候,使用电脑的IP就可以。

  如果使用模拟器进行调试,就不必考虑那么多情况了。新建Socket时,IP地址要使用10.0.2.2,这是系统为模拟器专门分配的,不能使用127.0.0.1.至于网上说的很多,PC和模拟器通信时,要使用端口重定向的问题,我在测试的时候,没有进行端口重定向,也可以实现PC向模拟器发数据。

  好了,废话说完了,直接上代码吧。

客户端:
  在一个EditText中输入一些字符,点击Button,把这些字符发送到服务器,服务器在收到这些数据后,在将这些数据返回给客户端。(xml文件比较简单,这里就不写了)

public class MainActivity extends Activity {
   
   
    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值