模拟器与pc通讯-android模拟器与pc的相互通信

问题描述

android模拟器与pc的相互通信

我现在再能实现模拟器联系pc,pc作为服务器被动的做出反应。不能实现pc发消息给模拟器。那要如何实现相互的通信呢

代码如下:

 package com.example.socket_android;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * 测试Android客户端与PC服务器通过socket进行交互
 * 客户端:把用户输入的信息发送给服务器
 * @author Ameyume
 *
 */
public class MainActivity extends Activity {
    private static final String TAG = "Socket_Android";

    private EditText mEditText = null;
    private TextView tx1 = null;
    private Button mButton = null;

    @SuppressLint("NewApi")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //强制占用ui
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }

        mButton = (Button)findViewById(R.id.button1);
        mEditText=(EditText)findViewById(R.id.editText1);
        //mEditText = (EditText)findViewById(R.id.editText1);
        tx1 = (TextView)findViewById(R.id.textView1);

        mButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                setTitle("测试Socket连接");
                Socket socket = null;

                try {
                    /* 指定Server的IP地址,此地址为局域网地址,如果是使用WIFI上网,则为PC机的WIFI IP地址
                     * 在ipconfig查看到的IP地址如下:
                     * Ethernet adapter 无线网络连接:
                     * Connection-specific DNS Suffix  . : IP Address. . . . . . . . . . . . : 192.168.1.100
                     */
                    InetAddress serverAddr = InetAddress.getByName("192.168.1.225");// TCPServer.SERVERIP
                    Log.d("TCP", "C: Connecting...");

                    // 应用Server的IP和端口建立Socket对象
                    socket = new Socket(serverAddr, 51706);
                    String message = "---Test_Socket_Android---";  

                    Log.d("TCP", "C: Sending: '" + message + "'");  

                    // 将信息通过这个对象来发送给Server
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(socket.getOutputStream())),
                            true);  

                    // 把用户输入的内容发送给server
                    String toServer = mEditText.getText().toString();
                    Log.d(TAG, "To server:'" + toServer + "'");
                    out.println(toServer);
                    out.flush();  

                    // 接收服务器信息
                    BufferedReader in = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                    // 得到服务器信息
                    String msg = in.readLine();
                    Log.d(TAG, "From server:'" + msg + "'");
                    // 在页面上进行显示
                    tx1.setText(msg);
                } catch(UnknownHostException e) {
                    //Log.e(TAG, "192.168.1.100 is unkown server!");
                    Log.e(TAG, "192.168.1.225 is unkown server!");
                } catch(Exception e) {
                    e.printStackTrace();
                } finally {
                    try {
                        socket.close();
                    } catch(Exception e) {
                        e.printStackTrace();
                    }
                }
            }

        });
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="#aacccc"
    tools:context="com.example.socket_android.MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView4"
        android:layout_marginTop="40dp"
        android:layout_toRightOf="@+id/textView4"
        android:background="#aaccff"
        android:text="发送" />

    <TextView
        android:id="@+id/textView1"
        android:background="#aaccff"
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_alignLeft="@+id/textView4"
        android:layout_below="@+id/textView4"
      />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"

        android:layout_marginTop="28dp"
        android:text="@string/hello_world" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="20dp"
        android:layout_alignRight="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:layout_marginRight="22dp"
        android:layout_marginTop="74dp"
        android:gravity="center"
        android:text="指令" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="60dp"
        android:layout_height="20dp"
        android:layout_alignLeft="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:layout_marginTop="25dp"
        android:text="返回结果:" />

    <EditText
        android:id="@+id/editText1"
        android:background="#aaccff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView3"
        android:layout_alignBottom="@+id/textView3"
        android:layout_alignRight="@+id/textView1"
        android:layout_toRightOf="@+id/textView4"
        android:ems="10" />

</RelativeLayout>
 //package Project1;

///**
// * Class1 的摘要说明。
// */
//public class Class1
//{
//    public Class1()
//    {
//        //
//        // TODO: 在此处添加构造函数逻辑
//        //
//    }
//}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 测试Android客户端与PC服务器通过socket进行交互
 * 服务器端:接收客户端的信息并回送给客户
 * @author Ameyume
 *
 */
public class Server implements Runnable
{
    //public static final String SERVERIP = "192.168.1.100";
    public static final String SERVERIP = "192.168.1.225";
    public static final int SERVERPORT = 51706;

    public void run()
    {
        try
        {
            System.out.println("S: Connecting...");

            ServerSocket serverSocket = new ServerSocket(SERVERPORT);

            while (true)
            {
                // 等待接受客户端请求
                Socket client = serverSocket.accept();

                System.out.println("S: Receiving...");

                try
                {
                    // 接受客户端信息
                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(client.getInputStream()));

                    // 发送给客户端的消息
                    PrintWriter out = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(client.getOutputStream())), true);

                    System.out.println("S: 111111");
                    String str = in.readLine(); // 读取客户端的信息
                    int j;

                    if (str.equals("a"))
                    {
                        j = 1;
                    }
                    else if (str.equals("b"))
                    {
                        j = 2;
                    }
                    else if(str.equals ("1"))
                    {
                        j = 3;
                    }
                    else
                    {
                        j=4;
                    }

                    switch (j)
                    {
                        case 1:
                            str = "a1";
                            break;
                        case 2:
                            str = "a2"; break;
                        case 3:
                            str = "a3"; break;
                        case 4:
                            str = "a4"; break;
                        case 5:
                            str = "a5"; break;
                        case 6:
                            str = "a6"; break;

                    }

                    System.out.println("S: 222222");
                    if (str != null)
                    {
                        // 设置返回信息,把从客户端接收的信息再返回给客户端
                        out.println("You sent to server message is:" + str);
                        out.flush();

                        // 把客户端发送的信息保存到文件中
                        File file = new File("C://android.txt");
                        FileOutputStream fops = new FileOutputStream(file);
                        byte[] b = str.getBytes();
                        for (int i = 0; i < b.length; i++)
                        {
                            fops.write(b[i]);
                        }
                        System.out.println("S: Received: '" + str + "'");
                    }
                    else
                    {
                        System.out.println("Not receiver anything from client!");
                    }
                }
                catch (Exception e)
                {
                    System.out.println("S: Error 1");
                    e.printStackTrace();
                }
                finally
                {
                    client.close();
                    System.out.println("S: Done.");
                }
            }
        }
        catch (Exception e)
        {
            System.out.println("S: Error 2");
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        Thread desktopServerThread = new Thread(new Server());
        desktopServerThread.start();

    }
}

解决方案

因为你服务器端没有手动发送方式,只有被动发送

Socket client = serverSocket.accept();//记录这个socket或者下面的out为全局变量。添加按钮事件,事件里面通过out.println("You sent to server message is:" + str);out.flush();发送主动消息。
 PrintWriter out = new PrintWriter(new BufferedWriter(
                     new OutputStreamWriter(client.getOutputStream())), true);
时间: 2024-11-18 07:21:07

模拟器与pc通讯-android模拟器与pc的相互通信的相关文章

模拟器 pc 通讯-android模拟器与pc服务器通讯

问题描述 android模拟器与pc服务器通讯 我现在做的可以实现模拟器和pc通讯,但是pc只能被动的接受信息然后在返回信息.那我要如何做才可以实现pc可以主动的发送消息给模拟器呢? 解决方案 通过sockect可以实现.服务端在PC端,客户端在Android模拟器.可以参考一下这个:http://blog.csdn.net/x605940745/article/details/17001641 解决方案二: 使用基于长连接的Socket可以实现,通信是双向的

Android中Service和Activity相互通信示例代码

前言 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,本文就给大家详细介绍了关于Android中Service和Activity相互通信的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Activity向Service通信 第一种方式:通过MyBinder方式调用Service方法 MainActivity public class Ma

android模拟器与PC的端口映射(转)

阅读目录 一.概述 二.实现步骤 回到顶部 一.概述 Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身设置为127.0.0.1,而PC并没有为Android模拟器系统指定IP,所以PC电脑不能通过IP来直接访问Android模拟器,要实现PC机和Android模拟器之间的相互通信必须借助于端口重定向(redir). 回到顶部 二.实现步骤 1.安装telnet 什么是telnet? Telnet协议是TCP/IP协议族的一员,是Internet远程登录服务的标准协议和主要方

视频-android模拟器可以连接PC的USB摄像头拍照不?

问题描述 android模拟器可以连接PC的USB摄像头拍照不? 各位高手们: 最近在研究摄像头拍照和视频这块,想通过模拟器调试本地PC的驱动摄像头拍照和视频,连接的是PC的是USB摄像头,不知道可现实不? 那位有弄过的可以分享一些经验 谢谢! 解决方案 模拟器好像不行,但是真实的手机是可以的,你可以在网上搜一下如何来做,网上有详解的: 如果回答对您有帮助,请采纳 解决方案二: 不行,这恰好是模拟器不支持的一个方面. 解决方案三: android的模拟器还没有这么强大.genymotion这个模

PC电脑和Android模拟器访问及模拟器之间tcp/udp通信

Android系统默认只能通过IP(10.0.2.2)单向访问PC电脑,而PC电脑不能通过IP来直接访问Android模拟器系统.要想实现PC电脑和Android模拟器系统以及Android模拟器之间相互通信必须借助端口重定向(redir)来实现. 先说说端口重定向所需要的telnet客户端安装: windows: 安装telnet客户端.如果没有安装,可以在windows程序管理中的打开或关闭系统功能下找到telnet客户端菜单项来启用telnet客户端功能. linux: 自行安装telne

Android 模拟器(JAVA)与C++ socket 通讯 分享_Android

C++ 作为Client端view plaincopy to clipboardprint? 复制代码 代码如下: // Client.cpp : Defines the entry point for the console application.     //     #include "stdafx.h"     #include      #pragma comment(lib,"ws2_32.lib")     #define  MAX_BUF_SIZE

Android 模拟器(JAVA)与C++ socket 通讯 分享

C++ 作为Client端 view plaincopy to clipboardprint? 复制代码 代码如下: // Client.cpp : Defines the entry point for the console application.     //     #include "stdafx.h"     #include      #pragma comment(lib,"ws2_32.lib")     #define  MAX_BUF_SIZ

本机两个Android模拟器之间的网络通信

  [本机(PC)IP以及Android模拟器IP的说明] 在本机上启动两个模拟器,本机(PC)和模拟器的信息如下: 大家可以看到,两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的. 获取模拟器名称: >adb devices List of devices attached emulator-5554 device emulator-5556 device 模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本

第三方Android 模拟器流畅速度快,适合开发人员

原文:第三方Android 模拟器流畅速度快,适合开发人员 "工欲善其事,必先利其器." 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! 12年我开始接触Android开发时候,手头上甚至连一部低端的Android手机都没有,那时候用的是Android SDK自带的AVD模拟器,相信任何Android开发者都对这货深恶痛绝.一直以来,Android开发都有以下的毛