2013-03-11 6 views
0

현재 Android에서 간단한 메시지 응용 프로그램을 작성하고 있습니다. 나는 완벽하게 실행되는 RunServer이라는 클래스의 서버를 가지고 있습니다. 그런 다음 클라이언트가 MainActivitystartClient()에 있습니다. 나는 onclick="startClient" 버튼이 있습니다. 그러나 버튼을 클릭 할 때마다 아무 일도 일어나지 않습니다. 로그에 모든 것을 넣으려고했는데 작동하지 않는 곳입니다.클라이언트/서버 응용 프로그램을 실행할 수 없습니다.

socket.connect(ipPort); 

문제가 무엇인지 파악할 수 없습니다. 나는 다른 포트와 IP 주소를 시도했지만 여전히 아무것도하지 못했습니다.

MainActivity :

public class MainActivity extends Activity { 

    private Socket socket; 
    private ObjectInputStream ois; 
    private DataOutputStream dos; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     runOnUiThread(new Runnable() { 

      public void run() { 
       EditText et = (EditText) findViewById(R.id.message_id); 
       String message = et.getText().toString(); 
       EditText et1 = (EditText) findViewById(R.id.messages); 
       et1.append(message); 
      } 
     }); 
    } 

    public void startClient(View v) { 
     socket = new Socket(); 
     InetSocketAddress ipPort = new InetSocketAddress("10.0.2.2", 4444); 
     System.out.println("HEJ!"); 
     try { 
      socket.connect(ipPort); // här tar det stop 
      Log.v("It works", "Hello"); 
      dos = new DataOutputStream(socket.getOutputStream()); 
     } catch (Exception e) { 
     } 
     Thread thread = new Thread(); 
     thread.start(); 
    } 
} 

RunServer :

public class RunServer { 

    private ServerSocket server; 
    private Socket socket; 
    private DataInputStream dis; 
    private int port; 

    public RunServer(int port) { 
     this.port = port; 
     Thread connectThread = new Thread(new Connect()); 
     connectThread.start(); 
    } 

    private class Connect implements Runnable { 

     public void run() { 
      try { 
       server = new ServerSocket(port); 
       System.out.println("Server running"); 
       while (true) { 
        socket = server.accept(); 
        Thread clientThread = new Thread(new TalkToClient(socket)); 
        clientThread.start(); 
        System.out.println("someone connected"); 
       } 
      } catch (IOException ex) { 
       Logger.getLogger(RunServer.class.getName()).log(Level.SEVERE, 
         null, ex); 
      } 
      try { 
       server.close(); 
      } catch (Exception e) { 
      } 
     } 
    } 

    private class TalkToClient implements Runnable { 

     private Socket socket; 

     public TalkToClient(Socket socket) { 
      this.socket = socket; 
     } 

     public void run() { 
      String clientMsg; 
      try { 
       dis = new DataInputStream(socket.getInputStream()); 
       while ((clientMsg = dis.readUTF()) != null) { 
        if (clientMsg.length() > 0) { 
         System.out.println("Whatup"); 
        } 
       } 
      } catch (Exception e) { 
       System.out.println(e); 
      } 
     } 
    } 

    public static void main(String[] args) { 
     new RunServer(4444); 
    } 
} 

레이아웃 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bakgrund" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/ip" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/white" /> 

    <EditText 
     android:id="@+id/ip_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/textView1" 
     android:background="@color/white" 
     android:ems="10" 
     android:hint="@string/get_ip" 
     android:inputType="numberDecimal" > 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/ip_id" 
     android:text="@string/port" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/white" /> 

    <EditText 
     android:id="@+id/port_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/textView2" 
     android:background="@color/white" 
     android:ems="10" 
     android:hint="@string/get_port" 
     android:inputType="number" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/port_id" 
     android:layout_below="@+id/port_id" 
     android:text="@string/message" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/white" /> 

    <EditText 
     android:id="@+id/message_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/textView3" 
     android:background="@color/white" 
     android:ems="10" 
     android:hint="@string/get_message" /> 

    <Button 
     android:id="@+id/connect" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/message_id" 
     android:onClick="startClient" 
     android:text="@string/connect" 
     android:textColor="@color/white" /> 

    <Button 
     android:id="@+id/send" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/connect" 
     android:layout_alignBottom="@+id/connect" 
     android:layout_toRightOf="@+id/connect" 
     android:text="@string/send" 
     android:textColor="@color/white" /> 

    <TextView 
     android:id="@+id/status_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/connect" 
     android:layout_below="@+id/send" 
     android:layout_marginTop="23dp" 
     android:text="@string/status" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/white" /> 

    <EditText 
     android:id="@+id/messages" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_below="@+id/status_id" 
     android:background="@color/white" 
     android:ems="10" 
     android:inputType="textMultiLine" /> 

</RelativeLayout> 

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.datorkomprojekt" 
    android:versionCode="1" 
    android:versionName="1.0" > 

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

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.datorkomprojekt.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 
,174,
+0

입니까? – hakiko

+0

예, 저는이 포트를 안드로이드 밖에서 사용해 보았습니다. 그냥 평범한 자바, 그리고 그것은 작동합니다. 어쩌면 에뮬레이터와 관련이 있습니다. – DrWooolie

+0

버튼에'setOnClickListener'를 구현 한 곳을 볼 수 없습니까? – hakiko

답변

0

내가 할 첫 번째 일은 코드가 Android 외부에서 작동하는지 확인하는 것입니다. 즉, 그냥 평범한 자바 코드입니다.

은 BTW 당신은 ​​ runOnUiThread 방법이 필요하지 않습니다. onCreate 메서드는 항상 기본 UI 스레드에서 실행됩니다.

확실하지는 XML에서 온 클릭이 작동하지 않는 이유는,하지만 당신은 그냥 프로그래밍 할 수있는 : 당신은 포트 4444 무료 확실

public class MyActivity extends Activity { 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     setContentView(R.layout.content_layout_id); 

     final Button button = (Button) findViewById(R.id.button_id); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
      } 
     }); 
    } 
} 
+0

나는 당신의 코드를 시도했지만 여전히 작동하지 않았다. 나는 간단한 자바 코드로 안드로이드 외부에서 그것을 시험해 보았다. 비록 내가 java.net.SocketException있어 : 연결 재설정,하지만 여전히 연결있어. – DrWooolie

+0

작동하지 않는다고 말하면 onClickListener가 실행되지 않았다는 것을 의미합니까? 디버깅을 시도 했습니까? –

+0

onClickListener가 실행되지 않았습니다. 그러나 결코 서버에 연결되어 있지 않습니다. socket.connect (ipPort); 지금은 아무 것도하지 않습니다. – DrWooolie

관련 문제