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


相关文章
|
Java Android开发
Android通过Socket与服务器进行通信
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~   先上代码,可以先把代码下下来,对着代码看本文。代码地址是:https://github.com/huangtianyu/SocketDemo,代码记得点击star哦~   总有些想尝试一些底层的人,之前做过socket开发,总是想能不能用socket实现手机和服务器直接通信。
1626 0
|
网络协议 API Android开发
Android Socket通讯
Android Socket通讯
161 0
Android Socket通讯
|
Java Android开发
【Android】socket局域网通信
我有一段时间特别想实现一个短距离的手机交互软件,比如多人联机小游戏app或者是多人文件共享app等,思来想去,得出了两个方案,一个是使用手机自带的蓝牙设备,通过蓝牙技术实现两个手机的数据交换,而另一个就是使用socket了。蓝牙技术对于android的小伙伴来说并不陌生,传文件什么的常用到,而且网上资料也十分丰富,所以这里不详细说明。而socket则是网络通信的大神级工具,无论c语言也好j
3501 0
|
Android开发 C++ Java
Android利用JNI通过Socket与服务器进行通信
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 不多说,先上代码。记得点击star哦,代码地址是:SocketDemo 上一篇文章写了如何通过Java层实现Socket和服务器的Socket进行通信,这一篇继续深究,写个如何通过native层实现socket和服务器进行通信。
2354 0
|
网络协议 Android开发
android 之TCP客户端编程
吸取教训!!!本来花了5个小时写完了,没想到,,,因为没点上面的自动保存查看一下,全没了,重新写呗 关于网络通信:每一台电脑都有自己的ip地址,每台电脑上的网络应用程序都有自己的通信端口,张三的电脑(ip:192.168.1.110)上有一个网络应用程序A(通信端口5000),李四的电脑(ip:192.168.1.220)上有一个网络应用程序B(通信端口8000),张三给李四发消息,首先你要知道李四的ip地址,向指定的ip(李四ip:192.168.1.220)发信息,信息就发到了李四的电脑。
1035 0
|
Android开发 移动开发
Android Socket与服务器通信通用Demo
在Android中通过Socket来来连接服务器,是一种比较简单的网络连接方式,虽然现在使用的不多,但某些场合还是很方便的,这里总结一下基本的写法。 客户端: try { Socket socket = new Socket(host, port); socket.
830 0
|
Android开发 网络协议 Java
Android Socket编程(udp)初探
前言 昨天刚把socket tcp编程简单讲解了,今天趁热打铁把udp编程也讲一下。一个是为了提醒自己,坚持下去,另外还是为了提升技术打下基础。如果讲的有什么不对的还请各位指正。
1289 0

热门文章

最新文章