本文介绍了Android 通过 TCP/IP 连接到计算机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在将我的 android 模拟器连接到我的计算机时遇到问题.我可以向android发送信息,但发送回时却失败了.
I am having trouble connecting my android emulator to my computer. I can send information to the android but when sending back it just fails.
这是我目前所拥有的:
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
它已经创建了服务器套接字,但之后什么也没有.有人能指出我正确的方向吗?
And it gets as far as creating the server socket, but nothing after that. Could someone point me in the right direction?
谢谢
更新
这里是客户:
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");
}
推荐答案
使用端口 7612
并在运行程序之前运行此命令以转发端口:
use port 7612
and run this command to forward ports before you run your program:
adb forward tcp:7612 tcp:7612
客户端:默认IP:127.0.0.1
Client side: default IP: 127.0.0.1
服务器端:IP地址为通配符地址
Server side: IP address is the wildcard address
服务器端:
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;
}
这篇关于Android 通过 TCP/IP 连接到计算机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!