求大神帮忙啊,利用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;
}
}
如果是模拟器的话,真实的IP是有可能访问不了的
已经在真机上实验过了可以的
楼主解决了吗?
我也碰到类似的问题,能不能说一下解决方案?