大师已去 2015-05-20 06:40 采纳率: 0%
浏览 2339

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();

    }
}
  • 写回答

1条回答 默认 最新

  • danielinbiti 2015-05-20 06:59
    关注

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

    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);
    
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况