2015-11-30 242 views
-1

即时尝试连接到运行在我的电脑与我的家庭网络和我的应用程序使用移动互联网(4克)的Java服务器,但它会抛出一个例外,我在做什么worngAndroid tcp客户端服务不连接

PS:tcpService.getPlaces方法正在工作。敬酒似乎是空的。

PS2:对不起蹩脚的英语:(

11-30 02:57:23.430 17607-17607/com.remedialguns.smartourist W/System.err: android.os.NetworkOnMainThreadException 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at libcore.io.IoBridge.connect(IoBridge.java:122) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163) 
11-30 02:57:23.432 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.Socket.startupSocket(Socket.java:590) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.Socket.tryAllAddresses(Socket.java:128) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.Socket.<init>(Socket.java:178) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at java.net.Socket.<init>(Socket.java:150) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at com.remedialguns.smartourist.ConnectionService.test(ConnectionService.java:53) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at com.remedialguns.smartourist.ListActivity$1.onServiceConnected(ListActivity.java:100) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1212) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1229) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.os.Handler.handleCallback(Handler.java:739) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.os.Looper.loop(Looper.java:135) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5312) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at java.lang.reflect.Method.invoke(Method.java:372) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
11-30 02:57:23.433 17607-17607/com.remedialguns.smartourist W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 
11-30 02:57:23.605 17607-17617/com.remedialguns.smartourist W/art: Suspending all threads took: 26.858ms 

这里是我的服务器代码:

public static void main(String[] args) throws Exception { 

    String clientSentence; 
    String capitalizedSentence; 
    ServerSocket welcomeSocket=new ServerSocket(6789); 

    while(true){ 
     Socket connectionSocket = welcomeSocket.accept(); 
     BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     clientSentence = inFromClient.readLine(); 
     System.out.println("Received: "+clientSentence); 
     capitalizedSentence = clientSentence.toUpperCase()+"\n"; 
     outToClient.writeBytes(capitalizedSentence); 
    } 

这里是我的服务代码:

package com.remedialguns.smartourist; 

import android.app.Service; 
import android.content.Intent; 
import android.os.Binder; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 
import android.os.NetworkOnMainThreadException; 

import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.PrintStream; 
import java.io.BufferedWriter; 
import java.io.BufferedReader; 
import java.io.OutputStream; 
import java.io.PrintWriter; 
import java.net.InetSocketAddress; 
import java.net.InetAddress; 
import java.net.UnknownHostException; 
import java.net.Socket; 
import java.net.SocketAddress; 
import java.util.Locale; 

public class ConnectionService extends Service{ 


    //Socket s; 
    //PrintStream os; 
    //public static int serverPort=1001; 
    //public static String serverIP="192.168.1.104"; 
    Place[] PlacesToShow = new Place[10]; 

    private static final String TAG="com.remedialguns"; 
    private final IBinder myBinder = new LocalBinder(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return myBinder; 
    } 

    public void sendProfileData(String userId, String gender,int age, String Country, int[] preferences){ 
     //send profile data to server 
    } 

    public String test(){ 
     String sentence="test"; 
     String modifiedSentence=""; 
     try { 
      //BufferedReader inFromUser=new BufferedReader(new InputStreamReader(System.in)); 
      Socket clientSocket = new Socket("190.158.138.160", 6789);//190.158.138.160 //192.168.1.104 
      DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); 
      BufferedReader inFromServer=new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
      outToServer.writeBytes(sentence+'\n'); 
      modifiedSentence=inFromServer.readLine(); 
      Log.d(TAG,modifiedSentence); 
      clientSocket.close(); 
      Toast.makeText(ConnectionService.this,"pls"+modifiedSentence, Toast.LENGTH_SHORT).show(); 
        } 
     catch (IOException e){ 
      e.printStackTrace(); 
     }catch (NetworkOnMainThreadException e){ 
      e.printStackTrace(); 
     } 
     return modifiedSentence; 

    } 


    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return super.onStartCommand(intent, flags, startId); 

    } 





    public Place[] getPlaces(){ 
     //here a send a String to server and receive an object Place[] 



     //F̶a̶k̶e̶ ̶d̶a̶t̶a̶ Test data 
     PlacesToShow[0]= new Place("MUSEO","Museo Nacional Agropecuario", 0.15, 0.4, 0.12); 
     PlacesToShow[1]= new Place("MUSEO","Museo Arqueológico Junín",0.10, 0.78, 0.44); 
     PlacesToShow[2]= new Place("MUSEO","Museo Botero", 0.2, 0.8, 0.08); 
     PlacesToShow[3]= new Place("MUSEO","Museo de Zea", 0.3, 0.65, 0.23); 
     PlacesToShow[4]= new Place("MUSEO","MUSEO DEL ORO", 0.13, 0.56, 0.12); 
     PlacesToShow[5]= new Place("MUSEO","MUSEO DE ARTE COLONIAL", 0.3, 0.67, 0.14); 
     PlacesToShow[6]= new Place("MUSEO","MUSEO HISTORICO DE LA POLICIA NACIONAL", 0.34, 0.3, 0.33); 
     PlacesToShow[8]= new Place("MUSEO","MUSEO DE LOS NIÑOS", 0.05, 0.65, 0.03); 
     PlacesToShow[7]= new Place("MUSEO","Museo Nacional", 0.15, 0.4, 0.12); 
     PlacesToShow[9]= new Place("MUSEO","MUSEO MILITAR", 0.07, 0.5, 0.6); 
     return PlacesToShow; 
    } 



    public class LocalBinder extends Binder { 
     ConnectionService getService(){ 
      return ConnectionService.this; 
     } 
    } 
} 

这里是我的清单

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.remedialguns.smartourist" > 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
     <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 


     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" > 
     </activity> 
     <activity 
      android:name=".RealMainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" > 
     </activity> 
     <activity 
      android:name=".ListActivity" 
      android:label="@string/app_name" 
      android:parentActivityName=".RealMainActivity" 
      android:theme="@style/AppTheme.NoActionBar" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.remedialguns.smartourist.RealMainActivity" /> 
     </activity> 

     <service 
      android:name=".ConnectionService" 
      android:enabled="true" 
      android:exported="true" > 
     </service> 
    </application> 

</manifest> 

回答

0

您正在尝试在主线程上执行网络操作。请尝试使用asyntask在后台线程上运行它,或者通过创建一个单独的线程(无论您喜欢什么),问题将消失。

一个不那么好的方法是用

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

StrictMode.setThreadPolicy(policy); 

为了更好的参考看到This answer

+0

我可以在服务entexds asyntask?或者我应该创建一个新的线程,并在Te服务中的该线程中运行该代码?,我尝试StricMode但应用程序冻结 – RemedialGuns

+0

您应该为相同的创建一个新的线程 –