2011-12-29 4 views
0

나는 이것에 대한 많은 연구를 해왔고 거기에서 모든 방법을 시도해 보았다. 192.168.0.101:18250 소켓에서 통신을 수락하는 C# 서버가 있습니다. 나는 아래 코드 (아래)를 가지고 있으며 앱의 주요 활동이다. 내가 코딩 한 방법은 모든 것이 onCreate 메소드에 있으므로 앱이 시작되면 바로 소켓을 연결해야하지만 내 서버에서는 연결이 표시되지 않는다는 것입니다. 서버가 완벽하고 아무 문제가 없다고 가정합니다. 또한 시장에서 앱을 사용해도 내 전화가 서버에 연결할 수 있는지 그리고 소켓을 통해 통신 한 앱에서 제대로 작동하는지 확인할 수있었습니다. 이것은 소켓 연결을 테스트하기 위해 몇 분 안에 던진 코드입니다.하지만 소켓을 연결하려고 시도해도 아무런 문제가 없습니다. 그리고 아무 예외도 던져지지 않습니다!안드로이드 클라이언트 서버

import java.io.*; 
import java.net.*; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.*; 

public class ClientServerTestActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 

     InetAddress addr = InetAddress.getByName("192.168.0.101"); 
     int port = 18250; 

     // This constructor will block until the connection succeeds 
     Socket socket = new Socket(addr, port); 
     socket.getOutputStream(); 
     BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
     wr.write("Hello World"); 
     wr.flush(); 

    } catch (UnknownHostException e) { 

     TextView t=(TextView)findViewById(R.id.textView1); 
     t.setText(t.getText() + e.getMessage() + "\r\n"); 

    } catch (IOException e) { 

     TextView t=(TextView)findViewById(R.id.textView1); 
     t.setText(t.getText() + e.getMessage() + "\r\n"); 
    } 
} 
} 
+0

소켓이 연결되지 않는다는 것을 어떻게 알 수 있습니까? 호스트를 해결할 수없는 경우 예외를 throw해야합니다. 한 줄로 차단합니까? – madmik3

+0

일반적인'catch (Exception e)'블록에'IOException'을 추가하십시오. 'try' 블록이'UnknownHostException' 또는'IOException'을 유발할 수있는 오류를 만나지 않았기 때문에 아무것도 실패하지 않는다는 것을 의미하지 않습니다. 또한 logcat을 확인하십시오. 다른 유형의 예외가 발생하면 거기에 기록해야합니다. – Squonk

+0

좋아요, 오류가 발생하여 스택 추적에 "권한이 거부되었습니다"라는 메시지가 표시됩니다. 매니페스트 또는 무언가에 일종의 권한을 추가해야합니까? –

답변

1

문제는 코드에 없으며 매니페스트에 문제가 있습니다. 네트워크 소켓을 열 수있는 응용 프로그램 권한을 부여하려면이 줄을 매니페스트에 추가해야했습니다.

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

희망이 있다면 도움이 될 것입니다. :)

관련 문제