我无法将Android模拟器连接到计算机。我可以向android发送信息但是当发送回来时它就失败了。
这是我到目前为止所做的:
public class sendDataToRegion extends AsyncTask<String,Void,List<String> >{
final TextView who = (TextView)findViewById(R.id.txtWho);
final TextView what = (TextView)findViewById(R.id.txtWhat);
final TextView when = (TextView)findViewById(R.id.txtWhen);
final TextView where = (TextView)findViewById(R.id.txtWhere);
final TextView actionTaken = (TextView)findViewById(R.id.txtActionTaken);
final TextView lengthOfTime = (TextView)findViewById(R.id.txtLengthOfTime);
public List<String> dataSend2 = new ArrayList<String>();
@Override
protected List<String> doInBackground(String... params) {
try
{
System.out.println("Mobile Server Program");
String whoString = who.getText().toString();
String whatString = what.getText().toString();
String whenString = when.getText().toString();
String whereString = where.getText().toString();
String actionString = actionTaken.getText().toString();
String lengthString = lengthOfTime.getText().toString();
dataSend2.add(whoString);
dataSend2.add(whatString);
dataSend2.add(whenString);
dataSend2.add(whereString);
dataSend2.add(actionString);
dataSend2.add(lengthString);
int port = 4444;
ServerSocket server = new ServerSocket(port);
Socket socket=server.accept();
DataOutputStream network = new DataOutputStream(socket.getOutputStream());
for(int i = 0; i< dataSend2.size();i++){
network.writeUTF(dataSend2.get(i));
}
}
catch (Exception e) {
Log.e("TCP", "S: Error", e);
}
return dataSend2;
}
protected void onPostExecute( ) {
System.out.println("Thread Finished " + dataSend2.size());
}
}//End of inner class
它创建了服务器套接字,但之后没有任何内容。有人能指出我正确的方向吗?
由于
更新
这是客户:
try
{
String ip = "146.176.230.192";
System.out.println("IP connected");
int port = 4444;
System.out.println("port connected");
// Connect to the server
Socket sock = new Socket(ip, port);
System.out.println("socket created");
// Create the incoming stream to read messages from
DataInputStream network = new DataInputStream(sock.getInputStream());
// Display our address
System.out.println("Address: " + sock.getInetAddress());
String line;
while ((line = network.readUTF()) != null)
{
System.out.println(line);
}
sock.close();
}
catch (IOException ioe)
{
System.out.println("Connection failed");
}
答案 0 :(得分:2)
使用端口7612
并在运行程序之前运行此命令转发端口:
adb forward tcp:7612 tcp:7612
客户端:默认IP:127.0.0.1
服务器端:IP地址是通配符地址
服务器端:
private ServerThread mServer;
....
java.net.ServerSocket s = new java.net.ServerSocket();
// bind, only port used
java.net.InetSocketAddressendPoint = new InetSocketAddress(port);
if( !s.isBound() ){
s.bind(7612);
}
....
客户端
private Socket mSocket;
private static final int mConnectTimeout = 2500; // 2.5 seconds
....
mSocket = new Socket();
InetSocketAddress remoteAddr = new InetSocketAddress(127.0.0.1, 7612);
mSocket.connect(remoteAddr, mConnectTimeout);
....
ServerThread类
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerThread implements Runnable{
public ServerThread(ServerSocket socket, OnConnectItf onConnect) // OnConnectItf is some callback
{
mServer = socket;
mCallback = onConnect;
mCancel = false;
}
public void cancel(){
mCancel = true;
}
public void run() {
while (true){
try {
Socket s = mServer.accept();
if (mCancel == true) break;
....
}
catch (IOException e) {
// optional: implement on error handler
break;
}
}
return;
}
private ServerSocket mServer;
private OnConnectItf mCallback;
private boolean mCancel;
}