안드로이드 개발 질문/답변
(글 수 45,052)
계속 헤메다가 이렇게 질문을 올리네요.
먼저 TCP 소켓으로 통신을 하구요.
안드로이드 클라이언트 측에서 주소록을 추출하여 C서버에 저장을 하려고합니다.
안드로이드 소스 중에 getlist라는 함수를 만들어서 제 폰에 있는 모든 전화번호를 스트링형식으로 버퍼에 넣는 거까지 되었지만 스트링으로 보내니 서버에서도 그냥 스트링으로 쭉 받더군요.
그래서 전송을 할 때 1024byte 씩 끊어서 보내고 서버에서도 끊어서 받고 싶은데 어떤 방법을 써야할지 모르겠네요. JSON 파싱을 이용하라는 말을 들었는데 개념이 잡히지 않아 잘 되지가 않네요.
클라이언트 소스만 첨부하겠습니다. 어떤 식으로 보내고 어떤 식으로 받아야 할지 조언좀부탁드릴게요.
(서버에서 어느 정도에 데이터가 오는지 미리확인하고 받을 수 있게 하는 방법...)
지금 스트링으로 보내고 있는데 바이트형식으로 바꿔서 보내는 건지도 궁금합니다.
package com.mnk.TCPsoketTest;
import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import org.json.*;
import java.net.Socket;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import org.json.*;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class TCPsoketTest extends Activity {
ListView listPerson;
ListView listPerson;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.Button01);
listPerson = (ListView) findViewById(R.id.android_list1);
listPerson = (ListView) findViewById(R.id.android_list1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TCPclient tp = new TCPclient(listPerson.toString());
tp.run();
}
});
public void onClick(View v) {
TCPclient tp = new TCPclient(listPerson.toString());
tp.run();
}
});
}
public ArrayList getList() {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };
// 이름순으로 정렬
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
// 조회해서 가져온다(Cursor 사용)
Cursor contactCursor = managedQuery(uri, projection, null, null, sortOrder);
// 정보를 담을 array 설정
ArrayList persons = new ArrayList();
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };
// 이름순으로 정렬
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
// 조회해서 가져온다(Cursor 사용)
Cursor contactCursor = managedQuery(uri, projection, null, null, sortOrder);
// 정보를 담을 array 설정
ArrayList persons = new ArrayList();
if (contactCursor.moveToFirst()) {
//do {
//do {
persons.add(contactCursor.getString(1) + contactCursor.getString(0));
//} while (contactCursor.moveToNext());
persons.add("END");
}
return persons;
}
//} while (contactCursor.moveToNext());
persons.add("END");
}
return persons;
}
private class TCPclient implements Runnable {
private static final String serverIP = "10.60.1.21"; // ex:
// 192.168.0.100
private static final int serverPort = 8000; // ex: 5555
public TCPclient(String _msg) {
private static final String serverIP = "10.60.1.21"; // ex:
// 192.168.0.100
private static final int serverPort = 8000; // ex: 5555
public TCPclient(String _msg) {
}
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
socket.setSendBufferSize(1024);
socket.setReceiveBufferSize(1024);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"EUC-KR")), true);
ArrayList msg = new ArrayList();
msg = getList();
int msglength = 0;
msglength = msg.toArray().length;
Log.d("TCP", "C: Sending: '" + msg + "'");
out.println(msglength);
//out.println(msg);
out.flush();
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC-KR"));
try {
String msg2 = in.readLine();
System.out.println(msg2);
out.flush();
socket.setReceiveBufferSize(1024);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"EUC-KR")), true);
ArrayList msg = new ArrayList();
msg = getList();
int msglength = 0;
msglength = msg.toArray().length;
Log.d("TCP", "C: Sending: '" + msg + "'");
out.println(msglength);
//out.println(msg);
out.flush();
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"EUC-KR"));
try {
String msg2 = in.readLine();
System.out.println(msg2);
out.flush();
Log.d("TCP", "C: Server send to me this message -->" + msg2);
}
}
catch (Exception e) {
Log.e("TCP", "C: Error1", e);
}
finally {
socket.close();
}
Log.e("TCP", "C: Error1", e);
}
finally {
socket.close();
}
}
catch (Exception e) {
Log.e("TCP", "C: Error2", e);
}
}
}
}
catch (Exception e) {
Log.e("TCP", "C: Error2", e);
}
}
}
}
계속 헤매고 있습니다 ㅠㅠ 도와주세요 ㅠㅠ



