Android套接字无法创建,Telnet连接正常
应该连接到在我的电脑上本地运行的服务器的代码不起作用。这是一项似乎对其他人有用的任务的一部分。我已经检查了防火墙、正确地址和端口检测、端口转发等。在模拟器上安装Telnet应用程序证明,使用10.0.2.2的模拟器,我可以访问在我的PC上运行的Python服务器,速度为127.0.0.1 下面是代码,我尝试了各种方法来解决潜在的InetAddress或套接字问题:Android套接字无法创建,Telnet连接正常,android,python,sockets,telnet,android-networking,Android,Python,Sockets,Telnet,Android Networking,应该连接到在我的电脑上本地运行的服务器的代码不起作用。这是一项似乎对其他人有用的任务的一部分。我已经检查了防火墙、正确地址和端口检测、端口转发等。在模拟器上安装Telnet应用程序证明,使用10.0.2.2的模拟器,我可以访问在我的PC上运行的Python服务器,速度为127.0.0.1 下面是代码,我尝试了各种方法来解决潜在的InetAddress或套接字问题: package uk.ac.man.cs.COMP28512.lab4; import android.app.Activity;
package uk.ac.man.cs.COMP28512.lab4;
import android.app.Activity;
import android.util.Log;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* Created by leeming
* Code snippets from http://examples.javacodegeeks.com/android/core/socket-core/android-socket-example/
*/
public class ServerConnect extends Thread{
public static final int BUFFER_SIZE = 2048;
private Socket socket;
private static final int SERVERPORT = 9999; //This is the port that we are connecting to
//Remember the channel simulator is 9998
private static final String SERVERIP = "10.0.2.2"; //This address is magically mapped to the host's loopback.
private static final String LOGTAG = "SocketTester";
boolean terminated = false;
private PrintWriter out = null;
private BufferedReader in = null;
Activity parentref;
/**
*
* @param parentRef Expects a reference to the calling activity, e.g. new ServerConnect(this);
*/
public ServerConnect(Activity parentRef)
{
parentref=parentRef;
}
/**
* Sends commands to the server. Called from UI thread via a button press
* @param cmd
*/
public void send(String cmd)
{
try
{
Log.i(LOGTAG,"Sending command: "+cmd);
out.println(cmd);
}
catch(Exception e)
{
Log.e(LOGTAG,"Failed to send command : "+e);
}
}
/**
* Main thread loop that grabs incoming messages
*/
public void run()
{
Log.i(LOGTAG,"Running socket thread");
try
{
// InetAddress svrAddr = InetAddress.getByName(SERVERIP);
byte[] Addr = new byte[]{10,0,2,2};
InetAddress svrAddr = InetAddress.getByAddress(Addr);
System.out.println("ADDRESS: " + svrAddr.toString());
/*
String IP = svrAddr.toString().substring(1);
InetAddress realAddr = InetAddress.getByName(IP);
System.out.println(IP);
System.out.println(realAddr.getAddress().toString());
*/
socket = new Socket(svrAddr, SERVERPORT);
// if (realAddr.isReachable(1000))
// System.out.println("Successfully reached");
//Setup i/o streams
out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//Keep listening for messages from server
while(!terminated)
{
final String message = in.readLine();
if(message != null && message != "")
{
Log.i(LOGTAG,"MSG recv : "+message);
//Update GUI with any server responses
final TextView txtv = (TextView) parentref.findViewById(R.id.txtServerResponse);
parentref.runOnUiThread(new Runnable() {
@Override
public void run() {
/**
*
*
* This is where the the UI gets updated by the socket
*
*
*/
txtv.setText(message+"\n"+txtv.getText());
}
});
}
}
}
catch (UnknownHostException uhe)
{
Log.e(LOGTAG,"Unknownhost\n"+uhe.getStackTrace().toString());
}
catch (Exception e) {
Log.e(LOGTAG, "Socket failed\n"+e.getMessage());
e.printStackTrace();
}
disconnect();
Log.i(LOGTAG,"Thread now closing");
}
/**
* Disconnect from the server as well as closing i/o streams
*/
public void disconnect()
{
Log.i(LOGTAG, "Disconnecting from server");
try
{
in.close();
out.close();
}
catch(Exception e)
{/*do nothing*/}
try
{
socket.close();
}
catch(Exception e)
{/*do nothing*/}
}
}
下面是我得到的日志输出:
03-30 21:08:39.846 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/MainPAge﹕ onCreate entered
03-30 21:08:39.852 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/SocketTester﹕ Running socket thread
03-30 21:08:39.861 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/System.out﹕ ADDRESS: /10.0.2.2
03-30 21:08:39.867 1115-1115/uk.ac.man.cs.COMP28512.lab4 E/SocketTester﹕ Socket failed
null
03-30 21:08:39.868 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ android.os.NetworkOnMainThreadException
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:122)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.net.Socket.startupSocket(Socket.java:590)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.net.Socket.<init>(Socket.java:226)
03-30 21:08:39.912 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at uk.ac.man.cs.COMP28512.lab4.ServerConnect.run(ServerConnect.java:85)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at uk.ac.man.cs.COMP28512.lab4.MainActivity.onCreate(MainActivity.java:33)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5933)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-30 21:08:39.915 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/SocketTester﹕ Disconnecting from server
03-30 21:08:39.918 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/SocketTester﹕ Thread now closing
03-30 21:08:39.982 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/OpenGLRenderer﹕ Render dirty regions requested: true
03-30 21:08:40.002 1115-1115/uk.ac.man.cs.COMP28512.lab4 D/﹕ HostConnection::get() New Host Connection established 0xaeef7a20, tid 1115
03-30 21:08:40.086 1115-1115/uk.ac.man.cs.COMP28512.lab4 D/Atlas﹕ Validating map...
03-30 21:08:40.437 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/﹕ HostConnection::get() New Host Connection established 0xaeef74a0, tid 1132
03-30 21:08:40.508 1115-1132/uk.ac.man.cs.COMP28512.lab4 I/OpenGLRenderer﹕ Initialized EGL, version 1.4
03-30 21:08:40.605 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/OpenGLRenderer﹕ Enabling debug mode 0
03-30 21:08:40.677 1115-1132/uk.ac.man.cs.COMP28512.lab4 W/EGL_emulation﹕ eglSurfaceAttrib not implemented
03-30 21:08:40.678 1115-1132/uk.ac.man.cs.COMP28512.lab4 W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa7a3b2e0, error=EGL_SUCCESS
03-30 21:08:40.812 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/Choreographer﹕ Skipped 39 frames! The application may be doing too much work on its main thread.
03-30 21:08:41.773 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/Choreographer﹕ Skipped 57 frames! The application may be doing too much work on its main thread.
03-30 21:08:39.8461115-1115/uk.ac.man.cs.COMP28512.lab4 I/MainPAge﹕ 输入一次创建
03-30 21:08:39.852 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/socketster﹕ 承插螺纹
03-30 21:08:39.861115-1115/uk.ac.man.cs.COMP28512.lab4 I/System.out﹕ 地址:/10.0.2.2
03-30 21:08:39.867 1115-1115/uk.ac.man.cs.COMP28512.lab4 E/socketster﹕ 套接字失败
无效的
03-30 21:08:39.868 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ android.os.NetworkOnMainThreadException
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在libcore.io.BlockGuardOs.connect上(BlockGuardOs.java:110)
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在libcore.io.IoBridge.ConnecterNo(IoBridge.java:137)中
03-30 21:08:39.898 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于libcore.io.IoBridge.connect(IoBridge.java:122)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.net.Socket.startupSocket(Socket.java:590)
03-30 21:08:39.899 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.net.Socket(Socket.java:226)
03-30 21:08:39.912 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于uk.ac.man.cs.COMP28512.lab4.ServerConnect.run(ServerConnect.java:85)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于uk.ac.man.cs.COMP28512.lab4.MainActivity.onCreate(MainActivity.java:33)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于android.app.Activity.performCreate(Activity.java:5933)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)上
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)上
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在android.app.ActivityThread.access$800(ActivityThread.java:144)
03-30 21:08:39.913 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于android.os.Handler.dispatchMessage(Handler.java:102)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于android.os.Looper.loop(Looper.java:135)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于android.app.ActivityThread.main(ActivityThread.java:5221)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.lang.reflect.Method.invoke(本机方法)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于java.lang.reflect.Method.invoke(Method.java:372)
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
03-30 21:08:39.914 1115-1115/uk.ac.man.cs.COMP28512.lab4 W/System.err﹕ 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-30 21:08:39.915 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/socketster﹕ 从服务器断开连接
03-30 21:08:39.918 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/socketster﹕ 线程正在关闭
03-30 21:08:39.982 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/opengl﹕ 请求渲染脏区域:true
03-30 21:08:40.002 1115-1115/uk.ac.man.cs.COMP28512.lab4 D/﹕ HostConnection::get()已建立新主机连接0xaeef7a20,tid 1115
03-30 21:08:40.0861115-1115/uk.ac.man.cs.COMP28512.lab4 D/Atlas﹕ 正在验证映射。。。
03-30 21:08:40.437 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/﹕ HostConnection::get()已建立新主机连接0xaeef74a0,tid 1132
03-30 21:08:40.508 1115-1132/uk.ac.man.cs.COMP28512.lab4 I/opengl﹕ 已初始化EGL,版本1.4
03-30 21:08:40.605 1115-1132/uk.ac.man.cs.COMP28512.lab4 D/opengl﹕ 正在启用调试模式0
03-30 21:08:40.677 1115-1132/uk.ac.man.cs.COMP28512.lab4 W/EGL_仿真﹕ 未实现eglSurfaceAttrib
03-30 21:08:40.678 1115-1132/uk.ac.man.cs.COMP28512.lab4 W/OpenGLRenderer﹕ 未能在表面0xa7a3b2e0上设置EGL_交换_行为,错误=EGL_成功
03-30 21:08:40.812 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/编舞﹕ 跳过了39帧!应用程序可能在其主线程上做了太多工作。
03-30 21:08:41.773 1115-1115/uk.ac.man.cs.COMP28512.lab4 I/编舞﹕ 跳过57帧!应用程序可能在其主线程上做了太多工作。
查看错误并跟踪它们,我无法理解是什么原因导致无法创建套接字。请参阅
看起来你在打电话