Android socket服务器通信

简介: 下面是一个demo,Android客户端通过socket与服务器通信。 由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别。

下面是一个demo,Android客户端通过socket与服务器通信。

 由于Android里面可以完全使用java.io.*包和java.net.*包,那么,实际上,逻辑部分与J2SE没有区别。只是UI代码不一样。

 Android客户端通过socket与服务器通信分为下面5步:

(1)通过IP地址和端口实例化Socket,请求连接服务器;

 

[java]  view plain copy
  1. socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321  

(2)获取Socket流以进行读写,并把流包装进BufferWriter或者PrintWriter

[java]  view plain copy
  1. PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);     

这里涉及了三个类:socket.getOutputStream得到socket的输出字节流,OutputStreamWriter是字节流向字符流转换的桥梁,BufferWriter是字符流,然后再包装进PrintWriter。

(3)对Socket进行读写

[java]  view plain copy
  1. out.println(message);  

 

(4)关闭打开的流

[java]  view plain copy
  1. out.close();  

完整工程代码如下:

[java]  view plain copy
  1. package com.yarin.android.Examples_08_04;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStreamWriter;  
  7. import java.io.PrintWriter;  
  8. import java.net.Socket;  
  9.   
  10. import android.app.Activity;  
  11. import android.os.Bundle;  
  12. import android.util.Log;  
  13. import android.view.View;  
  14. import android.view.View.OnClickListener;  
  15. import android.widget.Button;  
  16. import android.widget.EditText;  
  17. import android.widget.TextView;  
  18.   
  19. public class Activity01 extends Activity  
  20. {  
  21.     private final String        DEBUG_TAG   = "Activity01";  
  22.       
  23.     private TextView    mTextView = null;  
  24.     private EditText    mEditText = null;  
  25.     private Button      mButton = null;  
  26.     /** Called when the activity is first created. */  
  27.     @Override  
  28.     public void onCreate(Bundle savedInstanceState)  
  29.     {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.main);  
  32.           
  33.         mButton = (Button)findViewById(R.id.Button01);  
  34.         mTextView = (TextView)findViewById(R.id.TextView01);  
  35.         mEditText = (EditText)findViewById(R.id.EditText01);  
  36.           
  37.         //登陆  
  38.         mButton.setOnClickListener(new OnClickListener()  
  39.         {  
  40.             public void onClick(View v)  
  41.             {  
  42.                 Socket socket = null;  
  43.                 String message = mEditText.getText().toString() + "/r/n";   
  44.                 try   
  45.                 {     
  46.                     //创建Socket  
  47. //                  socket = new Socket("192.168.1.110",54321);   
  48.                     socket = new Socket("10.14.114.127",54321); //IP:10.14.114.127,端口54321  
  49.                     //向服务器发送消息  
  50.                     PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);        
  51.                     out.println(message);   
  52.                       
  53.                     //接收来自服务器的消息  
  54.                     BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));   
  55.                     String msg = br.readLine();   
  56.                       
  57.                     if ( msg != null )  
  58.                     {  
  59.                         mTextView.setText(msg);  
  60.                     }  
  61.                     else  
  62.                     {  
  63.                         mTextView.setText("数据错误!");  
  64.                     }  
  65.                     //关闭流  
  66.                     out.close();  
  67.                     br.close();  
  68.                     //关闭Socket  
  69.                     socket.close();   
  70.                 }  
  71.                 catch (Exception e)   
  72.                 {  
  73.                     // TODO: handle exception  
  74.                     Log.e(DEBUG_TAG, e.toString());  
  75.                 }  
  76.             }  
  77.         });  
  78.     }  
  79. }  

布局文件main.xml

[java]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <TextView    
  8.     android:id="@+id/TextView01"   
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="wrap_content"   
  11.     android:text="这里显示接收到服务器发来的信息"  
  12.     />  
  13.     <EditText   
  14.     android:id="@+id/EditText01"   
  15.     android:text="输入要发送的内容"   
  16.     android:layout_width="fill_parent"   
  17.     android:layout_height="wrap_content">  
  18.     </EditText>  
  19.     <Button   
  20.     android:id="@+id/Button01"  
  21.     android:layout_width="fill_parent"  
  22.     android:layout_height="wrap_content"  
  23.     android:text="发送"  
  24.     />    
  25. </LinearLayout>  

AndroidManifest.xml文件如下

[java]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="com.yarin.android.Examples_08_04"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <activity android:name=".Activity01"  
  8.                   android:label="@string/app_name">  
  9.             <intent-filter>  
  10.                 <action android:name="android.intent.action.MAIN" />  
  11.                 <category android:name="android.intent.category.LAUNCHER" />  
  12.             </intent-filter>  
  13.         </activity>  
  14.     </application>  
  15.     <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
  16.     <uses-sdk android:minSdkVersion="5" />  
  17. </manifest>   

当然,还有服务器端得代码

[java]  view plain copy
  1. package com.yarin.android.Examples_08_04;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStreamWriter;  
  7. import java.io.PrintWriter;  
  8. import java.net.ServerSocket;  
  9. import java.net.Socket;  
  10.   
  11. public class Server implements Runnable  
  12. {  
  13.     public void run()  
  14.     {  
  15.         try  
  16.         {  
  17.             //创建ServerSocket  
  18.             ServerSocket serverSocket = new ServerSocket(54321);  
  19.             while (true)  
  20.             {  
  21.                 //接受客户端请求  
  22.                 Socket client = serverSocket.accept();  
  23.                 System.out.println("accept");  
  24.                 try  
  25.                 {  
  26.                     //接收客户端消息  
  27.                     BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));  
  28.                     String str = in.readLine();  
  29.                     System.out.println("read:" + str);    
  30.                     //向服务器发送消息  
  31.                     PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);        
  32.                     out.println("server message");   
  33.                     //关闭流  
  34.                     out.close();  
  35.                     in.close();  
  36.                 }  
  37.                 catch (Exception e)  
  38.                 {  
  39.                     System.out.println(e.getMessage());  
  40.                     e.printStackTrace();  
  41.                 }  
  42.                 finally  
  43.                 {  
  44.                     //关闭  
  45.                     client.close();  
  46.                     System.out.println("close");  
  47.                 }  
  48.             }  
  49.         }  
  50.         catch (Exception e)  
  51.         {  
  52.             System.out.println(e.getMessage());  
  53.         }  
  54.     }  
  55.     //main函数,开启服务器  
  56.     public static void main(String a[])  
  57.     {  
  58.         Thread desktopServerThread = new Thread(new Server());  
  59.         desktopServerThread.start();  
  60.     }  
  61. }  

先开启服务器代码,

java  Server即可

然后启动android模拟器。运行结果

这是Android客户端。输入12345,点击发送:

TCP_CLIENT

 

 

这是服务器端收到的消息

tcp_server


相关文章
|
网络协议 开发者 Python
Socket如何实现客户端和服务器间的通信
通过上述示例,展示了如何使用Python的Socket模块实现基本的客户端和服务器间的通信。Socket提供了一种简单且强大的方式来建立和管理网络连接,适用于各种网络编程应用。理解和掌握Socket编程,可以帮助开发者构建高效、稳定的网络应用程序。
728 10
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
1296 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
1156 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
1168 1
如何在Java中实现多线程的Socket服务器?
在Java中,多线程Socket服务器能同时处理多个客户端连接以提升并发性能。示例代码展示了如何创建此类服务器:监听指定端口,并为每个新连接启动一个`ClientHandler`线程进行通信处理。使用线程池管理这些线程,提高了效率。`ClientHandler`读取客户端消息并响应,支持简单的文本交互,如发送欢迎信息及处理退出命令。
607 2
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送&quot;Hello, Server!&quot;后关闭。注意Android中需避免主线程进行网络操作。
475 4
|
Java 数据格式
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
Java面试题:简述Java Socket编程的基本流程,包括客户端和服务器的创建与通信。
420 0
|
9月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
778 10
|
9月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
851 8
|
9月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。