`
ictch
  • 浏览: 135416 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android关于socket编程,实现与服务器端通信

阅读更多

       Android手机的应用,除了它的手机功能之外,另外一个吸引人的地方在于它的开放性,这一点iphone无法比拟,至少iphone太多商业化气息。如同当年windows95一样,android为我们开启另一扇交流之窗,而要实现交流,socket通信必不可少。java在socket通信方面上已经有了很好的范例,我只是抛砖引玉,将其引入到android之中,疏漏之处在所难免,很多地方也值得深思与考量,高手不必拍砖,可跳过此文。下面,用敲门的方式演示Android如何实现套接字的通信。

本例实现功能如下:

Server端开启服务
Client端发起链接请求,并向Server端发送数据
Server端响应请求,并在Server显示,向Client端返回数据
Client端接收Server的数据并显示

 

Server端:

package com.android.Yao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class YaoChatServer extends Thread {

private YaoChatServer() throws IOException {
   CreateSocket();
   //创建Socket服务器
}

public void run() { 
   Socket client;
   String txt;
   try { 
    while (true)
    //线程无限循环,实时监听socket端口
    {
     client=ResponseSocket();       
     //响应客户端链接请求。。
    
     while(true)
     {
      txt=ReceiveMsg(client);  
      System.out.println(txt);
      //链接获得客户端发来消息,并将其显示在Server端的屏幕上
   
      SendMsg(client,txt);
      //向客户端返回消息

      if(true)break;
      //中断,继续等待链接请求
     }
    
     CloseSocket(client);
     //关闭此次链接
    }   
   } 
   catch (IOException e) {
    System.out.println(e);
   }

}

private ServerSocket server = null;
private static final int PORT = 5000;
private BufferedWriter writer;
private BufferedReader reader;

private void CreateSocket() throws IOException
{
   server = new ServerSocket(PORT, 100);
   System.out.println("Server starting..");  
}

private Socket ResponseSocket() throws IOException
{
   Socket client = server.accept(); 
   System.out.println("client connected..");
  
   return client;
}

private void CloseSocket(Socket socket) throws IOException
{
   reader.close();
   writer.close();
   socket.close();
   System.out.println("client closed..");
}

private void SendMsg(Socket socket,String Msg) throws IOException 
{
   writer = new BufferedWriter(
      new OutputStreamWriter(socket.getOutputStream()));
    writer.write(Msg+"\n");
    writer.flush();
   
}

private String ReceiveMsg(Socket socket) throws IOException
{
   reader = new BufferedReader(
     new InputStreamReader(socket.getInputStream()));     
    System.out.println("server get input from client socket..");
    String txt="Sever send:"+reader.readLine();
   
    return txt;
}

public static void main(final String args[]) throws IOException {
   YaoChatServer yaochatserver = new YaoChatServer();
   if (yaochatserver != null) {
    yaochatserver.start();
   }
}
}

 

 

Client端:

package com.android.Yao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.UnknownHostException;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;


public class YaoChatRoomAndroid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chatroom);
       

        findviews();
        setonclick();

    }

    private EditText chattxt;
    private TextView chattxt2;
    private Button chatok;
    
    public void findviews()
    {
        chattxt = (EditText)this.findViewById(R.id.chattxt);
        chattxt2 = (TextView)this.findViewById(R.id.chattxt2);
        chatok   = (Button)this.findViewById(R.id.chatOk);
    }
    
    private void setonclick()
    {
        chatok.setOnClickListener(new View.OnClickListener() {
   
    @Override
    public void onClick(View v) {
     try {
      connecttoserver(chattxt.getText().toString());
     } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   });
    }


    public void connecttoserver(String socketData) throws UnknownHostException, IOException
{
    Socket socket=RequestSocket("192.168.0.107",5000);
   SendMsg(socket,socketData);  
   String txt = ReceiveMsg(socket);
   this.chattxt2.setText(txt);    
}

    
    private Socket RequestSocket(String host,int port) throws UnknownHostException, IOException
    {   
    Socket socket = new Socket(host, port);
    return socket;
    }
    
    private void SendMsg(Socket socket,String msg) throws IOException
    {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   writer.write(msg.replace("\n", " ")+"\n");
   writer.flush();
    }
    
    private String ReceiveMsg(Socket socket) throws IOException
    {
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
   String txt=reader.readLine();
   return txt;

    }    
}

 

 

 

    通过上边的例子,本人通过一些转换,实现了Android与CSharp Server的通讯方法。原理没有太大差异,仅仅是应用的方法稍有不同。
CSharp Server 源代码:
01.TcpClient ConnectedClient = ServerListener.AcceptTcpClient(); 
02. 

03.NetworkStream netStream = ConnectedClient.GetStream(); 
04. 

05.BinaryReader br = new BinaryReader(netStream); 
06. 

07.byte[] tempByte = new byte[8192]; 
08. 

09.tempByte = br.ReadBytes(8192); 
10. 

11.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);


对上边的源代码做一些介绍:
通过TcpListener获得的Client信息创建一个TcpClient对象。
1.TcpClient ConnectedClient = ServerListener.AcceptTcpClient();


从TcpClient对象中提取NetworkStream对象,其目的是建立Socket数据流。
1.NetworkStream netStream = ConnectedClient.GetStream();


建立BinaryReader对象为刚刚创建的NetworkStream提供一个接口,借助于这个接口可以非常方便的读取信息。
1.BinaryReader br = new BinaryReader(netStream);


读取Stream中的byte array数据,转化为string字符串。
1.byte[] tempByte = new byte[8192]; 
2. 

3.tempByte = br.ReadBytes(8192); 
4. 

5.string RecevieString = System.Text.Encoding.Default.GetString(tempByte);


Android Client 源代码:
这个Android Client所应用的方法与前面例子中有很大区别,请各位特别注意(通过本人的反复验证,这个算是Java 与CSharp间可行的通讯方法)。
1.String message = "AndroidRes,Where is my Pig (Android)?"; 
2.Socket socket = new Socket("192.168.0.149", 51706); 
3.OutputStream ops=socket.getOutputStream(); 
4.DataOutputStream dos=new DataOutputStream(ops); 
5.dos.write(message.getBytes()); 
6.dos.close();


对上边的源代码做一些介绍:
同样是建立Socket对象。
1.Socket socket = new Socket("192.168.0.149", 51706);


根据Socket对象创建OutputStream对象,根据名称可以很容易的理解这个对象的目的,它是建立一个输出的NetworkStream。
1.OutputStream ops=socket.getOutputStream();


DataOutputStream类似于BinaryWriter,是为OutputStream建立一个接口,可以通过这个接口向Socket另外一端写数据。
1.DataOutputStream dos=new DataOutputStream(ops);


最后这两行代码是实施写的过程。
1.dos.write(message.getBytes()); 
2.dos.close();


以上就是为大家提供的Android与PC间通讯的方法
,如果你有更巧妙或者更方便的方法,希望能与大家共同分享!

分享到:
评论

相关推荐

    Android Socket编程客户端服务器端源码

    本教程将深入探讨Android Socket编程的基本概念、客户端与服务器端的实现以及相关源码解析。 一、Socket基本概念 Socket,也被称为套接字,是网络通信中的一个重要接口,它为两台设备提供双向通信的通道。在Android...

    计算机网络编程socket客户端与服务器通讯

    通过搭建Android客户端与服务器端的通信框架,并利用服务器作为中间件访问MySQL数据库,不仅锻炼了学生的编程实践能力,还帮助他们掌握了网络编程的基本原理和技术要点。此外,该项目还涉及到数据库操作、网络调试等...

    Android Socket编程实例(与PC通信,不同手机中间通信)

    在提供的"Android Socket demo"压缩包中,可能包含了一个简单的Android Socket通信示例项目,包括客户端和服务器端的代码实现,你可以通过学习和运行这个示例来加深对Android Socket编程的理解。记得在实际部署时,...

    Android手机客户端与服务器之间通信socket

    在Android中,我们通常使用java.net.Socket类来创建Socket对象,实现客户端与服务器端的双向通信。Socket通信基于TCP/IP协议,确保数据的有序性和可靠性。 二、Android客户端Socket通信步骤 1. 创建Socket对象:...

    android_Socket编程

    Android Socket编程是移动应用开发中实现设备间网络通信的关键技术。Socket,又称套接字,是一种网络编程接口,允许应用程序通过网络与其他设备上的应用程序进行数据交换。本篇将深入探讨Socket的基本概念、通信模型...

    Android环境下Socket编程,服务器端和客户端通讯

    在Android环境中进行Socket编程是构建网络应用程序的关键技术之一,它允许设备之间通过TCP/IP协议进行双向通信。在本文中,我们将深入探讨如何在Android平台上实现服务器端和客户端的Socket通讯,以及如何创建9999...

    android基于WiFi的socket客户端和服务器端

    在Android平台上实现基于WiFi的Socket通信,涉及到网络编程的核心概念,包括TCP/IP协议、套接字(Socket)以及客户端(Client)与服务器端(Server)的交互。本篇将详细阐述这些知识点,并以"SocketServer"和"Socket...

    Android Socket编程实现服务器数据读取

    在Android开发中,Socket编程是实现设备间通信的重要手段,特别是在服务器数据读取的应用场景下。Socket,也称为套接字,是网络编程中的一个概念,它为应用程序提供了在网络中发送和接收数据的接口。本篇文章将深入...

    Android开发,Socket Client端和Socket Server端数据发送和接收

    Socket分为客户端(Socket Client)和服务器端(Socket Server),它们共同构成了基于TCP/IP协议的通信模型。本篇文章将详细探讨Android环境下如何进行Socket Client端和Socket Server端的数据发送与接收。 1. **...

    Android_Socket_客户端和服务器端,支持多张图片同时传送,自定义协议头

    总的来说,这个项目提供了一个完整的Android Socket通信示例,展示了如何在客户端和服务器端之间进行多张图片的实时传输,并通过自定义协议头实现了更灵活、可靠的通信机制。这对于开发者来说是一个很好的学习和参考...

    Android socket 通信编程

    - **服务器端与客户端**:在Socket通信中,通常有一方作为服务器端(Server),负责监听并接受来自客户端(Client)的连接请求。而客户端则主动发起连接请求,并与服务器端进行数据交互。 #### 三、示例代码解析 ...

    android 网络编程详解代码第7章(android的Socket编程)

    在Android中,我们通常使用`java.net.Socket`类和`ServerSocket`类来实现客户端和服务器端的通信。 客户端Socket编程主要涉及以下步骤: 1. 创建Socket对象,指定服务器的IP地址和端口号。例如: ```java Socket...

    android socket 编程实例

    在Android平台上进行网络通信时,Socket编程是一种常见且重要的技术,它允许设备通过TCP或UDP协议与其他设备或服务器进行双向数据传输。在这个实例中,我们将深入探讨如何在Android客户端和Java服务器端实现Socket...

    基于Socket的Android手机视频实时传输服务器端

    标题中的“基于Socket的Android手机视频实时传输服务器端”指的是使用Socket编程技术,在Android设备上实现视频流的实时传输到服务器端(PC)的应用。Socket是网络编程的基础,它允许两个程序通过网络进行通信,这里...

    android socket 服务器端

    在Android平台上,Socket编程主要用于实现设备间的网络通信。在标题"android socket 服务器端"中,我们可以理解到这个话题是关于如何在Android设备上构建一个Socket服务器,以便其他客户端(可能是Android应用或者...

    Android Socket服务器客户端编程

    首先,让我们从服务器端开始。在Android中建立一个Socket服务器,我们需要创建一个ServerSocket对象,指定一个端口号,并监听这个端口以接受来自客户端的连接请求。`MultiThreadServer`示例可能包含一个名为`Server...

    android基于socket两个手机之间进行通信

    总之,通过Android的Socket编程,两个设备可以在同一局域网内进行实时的数据交换,实现诸如文件传输、聊天应用等功能。正确理解和应用这些知识点,可以为开发高效、稳定的网络应用打下坚实基础。

    android_开发之socket编程_UDP和TCP通信实现

    标题与描述均聚焦于“Android开发之Socket编程:UDP和TCP通信实现”,这明确指出了文章的核心主题,即在Android平台上使用两种不同的网络通信协议——用户数据报协议(UDP)和传输控制协议(TCP)进行Socket编程的...

    Android中的Socket编程

    在Android应用开发中,Socket编程是实现设备间通信的重要手段,尤其在构建网络服务、实时数据传输等场景中不可或缺。本教程将引导初学者逐步理解并掌握Android中的Socket编程技术。 首先,Socket在计算机网络中被...

    Android Socket编程源码(与PC通讯)

    在Android开发中,Socket编程是实现设备间通信的重要手段,特别是在需要与个人计算机(PC)进行数据交互时。本教程将深入探讨如何使用Android Socket编程实现Android设备与PC之间的通讯。 首先,我们要理解Socket的...

Global site tag (gtag.js) - Google Analytics