
我正在尝试运行我在网上找到的服务器端和客户端示例.
这是服务器:
public class ServerActivity extends Activity { private TextVIEw serverStatus; private TextVIEw serverStatus2; // DEFAulT IP public static String SERVERIP = "10.100.102.15"; // DESIGNATE A PORT public static final int SERVERPORT = 8080; private Handler handler = new Handler(); private ServerSocket serverSocket; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_server); serverStatus = (TextVIEw) findVIEwByID(R.ID.server_status); serverStatus2 = (TextVIEw) findVIEwByID(R.ID.server_status2); SERVERIP = getLocalipAddress(); Thread fst = new Thread(new ServerThread()); fst.start(); } public class ServerThread implements Runnable { public voID run() { try { if (SERVERIP != null) { handler.post(new Runnable() { @OverrIDe public voID run() { serverStatus .setText("Listening on IP: " + SERVERIP); } }); serverSocket = new ServerSocket(SERVERPORT); while (true) { // ListEN FOR INCOMING CLIENTS Socket clIEnt = serverSocket.accept(); handler.post(new Runnable() { @OverrIDe public voID run() { serverStatus2.setText("Connected."); } }); try { BufferedReader in = new BufferedReader( new inputStreamReader( clIEnt.getinputStream())); String line = null; while ((line = in.readline()) != null) { Log.d("ServerActivity", line); handler.post(new Runnable() { @OverrIDe public voID run() { // DO WHATEVER YOU WANT TO THE FRONT END // THIS IS WHERE YOU CAN BE CREATIVE } }); } break; } catch (Exception e) { handler.post(new Runnable() { @OverrIDe public voID run() { serverStatus .setText("Oops. Connection interrupted. Please reconnect your phones."); } }); e.printstacktrace(); } } } else { handler.post(new Runnable() { @OverrIDe public voID run() { serverStatus .setText("Couldn't detect internet connection."); } }); } } catch (final Exception e) { handler.post(new Runnable() { @OverrIDe public voID run() { serverStatus.setText("Error" + e.getMessage()); } }); e.printstacktrace(); } } } // GETS THE IP ADDRESS OF YOUR PHONE'S NETWORK private String getLocalipAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e("ServerActivity", ex.toString()); } return null; } @OverrIDe protected voID onStop() { super.onStop(); try { // MAKE SURE YOU CLOSE THE SOCKET UPON EXITING serverSocket.close(); } catch (IOException e) { e.printstacktrace(); } } }这是客户的代码:
public class ClIEntActivity extends Activity { private EditText serverIp; private button connectPhones; private String serverIpAddress = ""; private boolean connected = false; //private Handler handler = new Handler(); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_clIEnt); serverIp = (EditText) findVIEwByID(R.ID.server_ip); connectPhones = (button) findVIEwByID(R.ID.connect_phones); connectPhones.setonClickListener(connectListener); } private OnClickListener connectListener = new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { if (!connected) { serverIpserverIpAddress = serverIp.getText().toString(); if (!serverIpAddress.equals("")) { Thread cThread = new Thread(new ClIEntThread()); cThread.start(); } } } }; public class ClIEntThread implements Runnable { public voID run() { try { InetAddress serverAddr = InetAddress.getByname(serverIpAddress); Log.d("ClIEntActivity", "C: Connecting..."); Socket socket = new Socket(serverAddr, 8080); connected = true; while (connected) { try { Log.d("ClIEntActivity", "C: Sending command."); PrintWriter out = new PrintWriter( new BuffereDWriter(new OutputStreamWriter( socket.getoutputStream())), true); // WHERE YOU ISSUE THE COMMANDS out.println("hey Server!"); Log.d("ClIEntActivity", "C: Sent."); } catch (Exception e) { Log.e("ClIEntActivity", "S: Error", e); } } socket.close(); Log.d("ClIEntActivity", "C: Closed."); } catch (Exception e) { Log.e("ClIEntActivity", "C: Error", e); connected = false; } } } }当在同一个eclipse模拟器上运行上面的命令时,服务器抛出异常“Socket Closed”,甚至没有达到while循环“while(true)”.有人知道为什么吗?
这是控制台的输出:
AndroID Launch!adb is running normally.Performing com.example.server.ServerActivity activity launchautomatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'androID2.3'Uploading server.apk onto device 'emulator-5554'Installing server.apk...Success!Starting activity com.example.server.ServerActivity on device emulator-5554ActivityManager: Starting: Intent { act=androID.intent.action.MAIN cat=[androID.intent.category.LAUNCHER] cmp=com.example.server/.ServerActivity }------------------------------AndroID Launch!adb is running normally.Performing com.example.clIEnt.ClIEntActivity activity launchautomatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'androID2.3'Application already deployed. No need to reinstall.Starting activity com.example.clIEnt.ClIEntActivity on device emulator-5554ActivityManager: Starting: Intent { act=androID.intent.action.MAIN cat=[androID.intent.category.LAUNCHER] cmp=com.example.clIEnt/.ClIEntActivity }这是LogCat输出:
08-08 13:04:38.165: D/ClIEntActivity(360): C: Connecting...08-08 13:04:38.176: E/ClIEntActivity(360): C: Error08-08 13:04:38.176: E/ClIEntActivity(360): java.net.ConnectException: /10.0.2.15:50907 - Connection refused08-08 13:04:38.176: E/ClIEntActivity(360): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)08-08 13:04:38.176: E/ClIEntActivity(360): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)08-08 13:04:38.176: E/ClIEntActivity(360): at java.net.socket.startupSocket(Socket.java:705)08-08 13:04:38.176: E/ClIEntActivity(360): at java.net.socket.<init>(Socket.java:263)08-08 13:04:38.176: E/ClIEntActivity(360): at com.example.clIEnt.ClIEntActivity$ClIEntThread.run(ClIEntActivity.java:58)08-08 13:04:38.176: E/ClIEntActivity(360): at java.lang.Thread.run(Thread.java:1019)08-08 13:04:40.456: W/IinputConnectionWrapper(360): showStatusIcon on inactive > > > inputConnection解决方法:
解决了IT,http://developer.android.com/tools/devices/emulator.html.
问题是默认的androID模拟器实例只能与自身和以太网交互,因此不同的实例不能相互联网.
如果要这样做,首先必须在实例中设置重定向.
阅读本页它有点像…很多:D
以上是内存溢出为你收集整理的Android客户端和服务器端编程全部内容,希望文章能够帮你解决Android客户端和服务器端编程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)