huanyuai 2015-08-18 03:29 采纳率: 0%
浏览 1626

求大神帮忙啊,利用Android socket连接手机与电脑

求大神帮忙啊,利用Android socket连接手机与电脑,手机能够发送信息给电脑,但电脑发不了信息。ip是112.123.252.204 端口号是8001 用户是A359772039260139
xml
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"
tools:context=".MainActivity" >

 <EditText
    android:id="@+id/ip"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="输入ip地址" />

  <EditText
    android:id="@+id/port"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/ip"
    android:hint="输入端口号" />

  <EditText 
      android:id="@+id/user"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_below="@+id/port"
      android:hint="输入用户名"/>


  <Button 
    android:id="@+id/connect"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/user"
    android:text="连接"/>

  <TextView 
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="250px"
    android:layout_below="@+id/connect"
    />

  <EditText 
    android:id="@+id/edit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/text"
    android:hint="输入信息"/>

  <Button 
    android:id="@+id/send"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/edit"
    android:text="发送"/>

java

package com.example.pro201508152;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
EditText ip;
EditText user;
EditText editText;
TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ip = (EditText)findViewById(R.id.ip);
    user =(EditText) findViewById(R.id.user);
    editText = (EditText) findViewById(R.id.edit);
    textView = (TextView) findViewById(R.id.text);


    findViewById(R.id.connect).setOnClickListener(
            new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {

                    connect();
                }
            });

    findViewById(R.id.send).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {

            send();
        }
    });
}

Socket socket = null;
OutputStream bWriter = null;
BufferedReader bReader = null;
public void connect(){


    AsyncTask<Void, String, Void> read = new AsyncTask<Void, 
            String, Void>() {

        @Override
        protected Void doInBackground(Void... arg0) {
            try {
                socket = new Socket(ip.getText().toString(),8001);
                bWriter = socket.getOutputStream();
                bReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                publishProgress("@success");
            } catch (UnknownHostException e1) {
                Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show();

            } catch (IOException e1) {
                Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show();

            }
            try {
                user();
            } catch (Exception e) {
                // TODO: handle exception
                Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();

            }
            try {

                String line;
                while ((line = bReader.readLine())!= null){
                    publishProgress(line);

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            if(values[0].equals("@success")){
                Toast.makeText(MainActivity.this, "连接成功!", Toast.LENGTH_SHORT).show();

            }
            textView.append("别人说:"+values[0]+"\n");
            super.onProgressUpdate(values);
        }
    };
    read.execute();


}
public void send() {
    try{
        byte[] x = new byte[200];
        byte[] y;
        String str = editText.getText().toString();
        y = str.getBytes("GBK");
        //bWriter.write(x, 0, 100);
        x[0]= 0x24;
        x[2]= (byte)y.length;
        x[3]=(byte)(('D'-'A')<<3);
        x[1] = (byte)(-(x[0]+x[2]+x[3]));

        for(int i =0;i<y.length;i++)
            x[4+i] = y[i];
        textView.append("我说:"+editText.getText().toString()+"\n");
        //bWriter.write(editText.getText().toString()+"\n");
        bWriter.write(x,0,4+y.length);
        bWriter.flush();
        editText.setText("");
    }catch(IOException e){
        e.printStackTrace();
    }
}
public void user() {
    try{
        byte[] x = new byte[200];
        byte[] y = user.getText().toString().getBytes();
        //{'A','3','5','9','7','7','2','0','3','9','2','6','0','1','3','9'};
        //bWriter.write(x, 0, 100);
        x[0]= 0x24;
        x[2]= (byte)y.length;
        x[3]=(byte)(('L'-'A')<<3);
        x[1] = (byte)(-(x[0]+x[2]+x[3]));

        for(int i =0;i<y.length;i++)
            x[4+i] = y[i];
        //textView.append("我说:"+editText.getText().toString()+"\n");
        //bWriter.write(editText.getText().toString()+"\n");
        bWriter.write(x,0,4+y.length);
        bWriter.flush();
        //editText.setText("");
    }catch(IOException e){
        e.printStackTrace();
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

  • 写回答

3条回答 默认 最新

  • Kinokol 2015-08-18 05:14
    关注

    如果是模拟器的话,真实的IP是有可能访问不了的

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)