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


相关文章
|
3月前
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
249 0
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
140 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
154 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
136 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
1月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
1月前
|
存储 监控 NoSQL
Redis的实现二: c、c++的网络通信编程技术,让服务器处理多个client
本文讨论了在C/C++中实现服务器处理多个客户端的技术,重点介绍了事件循环和非阻塞IO的概念,以及如何在Linux上使用epoll来高效地监控和管理多个文件描述符。
28 0
|
2月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【9月更文挑战第14天】网络协议是机器间交流的约定格式,确保信息准确传达。主要模型有OSI七层与TCP/IP模型,通过分层简化复杂网络环境。IP地址全局定位设备,MAC地址则在本地网络中定位。网络分层后,数据包层层封装,经由不同层次协议处理,最终通过Socket系统调用在应用层解析和响应。
|
3月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
56 6
|
3月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
|
3月前
|
网络协议 C# 开发者
WPF与Socket编程的完美邂逅:打造流畅网络通信体验——从客户端到服务器端,手把手教你实现基于Socket的实时数据交换
【8月更文挑战第31天】网络通信在现代应用中至关重要,Socket编程作为其实现基础,即便在主要用于桌面应用的Windows Presentation Foundation(WPF)中也发挥着重要作用。本文通过最佳实践,详细介绍如何在WPF应用中利用Socket实现网络通信,包括创建WPF项目、设计用户界面、实现Socket通信逻辑及搭建简单服务器端的全过程。具体步骤涵盖从UI设计到前后端交互的各个环节,并附有详尽示例代码,助力WPF开发者掌握这一关键技术,拓展应用程序的功能与实用性。
121 0
下一篇
无影云桌面