2016-07-25 2 views
0

RECEIVE_CRISIS 이상의 데이터 수신을 시작하려면 socket에 연결하고 자격증 명 정보를 보내야합니다.Android에서 소켓을 통해 데이터 보내기

Socket.IO 안드로이드 코드 용 라이브러리를 사용하고 있습니다. 연결에서 로그를 얻지 못했기 때문에 디버그하기가 정말 어렵습니다. 왜 실패했는지 모릅니다. 안드로이드 측에서 작업을 시작한 이래로 서버에서 아무 것도받지 못했습니다. NSDictionary은 Android의 JSONObject과 동일합니까? sendEvent은 Android의 send() 또는 emit()과 동일합니까? JSON을 Object 또는 Array로 보내야합니까? 마지막으로 로그 오류를 얻는 방법은 무엇입니까?

내가 좀 잃었어요 그래서 아이폰 OS 부분에서 일하고 ..이

이것은 아이폰 OS 코드입니다 (I 안전 목적을 위해 주소를 수정) :

NSDictionary *[email protected]{@"user":_username,@"orgid":_organizationId}; 
[_socketIO connectToHost:@"nodejs.myserver.com" onPort:3000 ]; 
    [_socketIO sendEvent:@"joinparty" withData:params]; 

이는 입니다 안드로이드 코드 :

private void connectAndListen(int username) throws Exception { 
    socket = IO.socket("nodejs.myserver.com:3000"); 
    socket.connect(); 

    JSONObject json = new JSONObject(); 
    json.put("user", username); 
    json.put("orgid", settings.getString("orgid", "")); 

    Log.e(TAG, json.toString()); 

    socket.send("joinparty",json); 
    socket.emit("joinparty", json); 

    socket.on(RECEIVE_CRISIS, onCrisis); 
} 

업데이트] 질문

private void connectAndListen(int id) throws Exception { 
    IO.setDefaultSSLContext(SSLContext.getDefault()); 

    // Set default hostname 
    HostnameVerifier hostnameVerifier = new HostnameVerifier() { 
     @Override 
     public boolean verify(String hostname, SSLSession session) { 
      HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier(); 
      return true; 
     } 
    }; 
    IO.setDefaultHostnameVerifier(hostnameVerifier); 
    IO.Options options = new IO.Options(); 
    // set as an option 
    options.sslContext = SSLContext.getDefault(); 
    options.hostnameVerifier = hostnameVerifier; 
    options.secure = true; 
    socket = IO.socket("nodejs.myserver.com:3000", options); 
    socket.connect(); 
    JSONObject json = new JSONObject(); 
    json.put("user", id); 
    json.put("orgid", settings.getString("orgid", "")); 

    Map<Object, Object> arrays = new HashMap<>(); 
    arrays.put("user", id); 
    arrays.put("orgid",settings.getString("orgid", "")); 

    socket.emit("joinparty", arrays); 
    socket.on(RECEIVE_CRISIS, onCallback); 
    socket.on("connect_error", onCallback); 
    socket.on("connect", onCallback); 
    socket.on("Object", onCallback); 
    socket.on("connect_timeout", onCallback); 
} 

private Emitter.Listener onCallback = new Emitter.Listener() { 
    @Override 
    public void call(Object... args) { 
     Log.e(TAG, args[0]+""); 
    } 
}; 

답변

1

Is the NSDictionary is equivalent to the JSONObject on Android?

아니, 그렇지 않아. NSDictionary는 class cluster입니다. 실제 구현은 API 사용자가 숨길 수 있습니다. 사실, Foundation 프레임 워크 등 자바에 대한 그것에 가장 가까운 데이터의 양에 따라 실행 시간에 적절한 구현을 선택합니다 것은 안드로이드 방출되는 Map<Object, Object>

Is sendEvent equivalent to send() or emit() on Android?

입니다. from official documentation

DO I need to send the JSON as an Object or an Array?

대신 Map을 보내십시오. JSON은 다른 것입니다. 서버가 JSON 형식의 데이터를 필요로하는 경우에만 보내십시오.

Finally, How to I get the log error?

combination of emitter and manager을 사용해야합니다.

+0

이제 마침내 오류 : xhr 폴링 오류가 표시됩니다. 나는 이것이 Retrofit을 사용하는 것과 같은 문제가 있었기 때문에 SSL 인증과 관련이있을 것이라고 생각합니다. 내 질문을 업데이트했습니다. – Jaythaking

+0

다른 오류가 발생하면 다른 질문에 필요한 세부 정보를 게시하십시오. –

+0

초기 문제는 해결되지 않았습니다. – Jaythaking

관련 문제