서버안드로이드 / 클라이언트 안드로이드 간의 통신을 어떻게해야할까요?
구현하려고하는데..
소켓통신 같은게 있을줄 알았는데
알아보니까
자바 서버를 둔 소켓 프로그래밍 밖에 없어서요
안드로이드 단말기 하나를 서버로 사용하고
또다른 안드로이드 단말기를 클라이언트로 사용하고싶은데
어떤방법이 있을까요?
그냥 자바에서 소켓쓰듯 하면 됩니다
cli
----------------
String serverIP = "192.168.42.21"; //ex: 192.168.0.100
int serverPort = 8000; // ex: 5555
//Toast.makeText(CameraPreview.this, "파일갯수"+file_count, Toast.LENGTH_LONG).show();
try
{
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
OutputStream out = socket.getOutputStream();
// InputStream is = socket.getInputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
//BufferedReader br = new BufferedReader(new InputStreamReader(is));
String data = file_count+"";
bw.write(data);
bw.flush();
socket.close();
}
catch(Exception e){
System.out.println("연결 실패1");
e.printStackTrace();
finally {socket.close();}
catch (Exception e) {
System.out.println("연결 실패2");
Log.e("TCP", "C: Error2", e);
----ser
System.out.println("소켓 열기 시도");
// Toast.makeText(CameraPreview.this, "소켓시도", Toast.LENGTH_SHORT).show();
ServerSocket mServerSocket;
mServerSocket=new ServerSocket(8000);
//mServerSocket.bind(null);
Socket mClientSocket = mServerSocket.accept();
// Toast.makeText(CameraPreview.this, "소켓", Toast.LENGTH_LONG).show();
System.out.println("소켓");
OutputStream out = mClientSocket.getOutputStream();
InputStream is = mClientSocket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(file_path)));
BufferedOutputStream bos = new BufferedOutputStream(mClientSocket.getOutputStream());
wrpath=tempstr+"/final.jpg";
FileOutputStream output = new FileOutputStream(wrpath);
System.out.println("wrpath___"+wrpath);
int size = 0;
byte b[] = new byte[1024];
while(mClientSocket.getInputStream().read(b)>0)
output.write(b);
output.flush();
output.close();
// Toast.makeText(CameraPreview.this, data, Toast.LENGTH_LONG).show();
catch(Exception e)
System.out.println("소켓 열기 실패");
System.out.println("소켓 열기 완료");
----
일단 제가 하고 있는 부분의 클라/서버입니다
서로 대응되는 부분은 아니고 다른부분이라 그대로 쓰시면 안되겠지만
대충 구조 보시는덴 문제 없을거라 봅니다
아...근데 3G망은 사설IP로 부여되서
PC클라/And서버 하면 접속이 불가능하더군요
일단 저도 해결책을 찾고있긴 한데...
딱히 방법은 안보이더군요
And클라/And서버 하면 어떻게 될지 모르겠지만서도
일단 참고하시기 바랍니다.
많은도움되었습니다!!감사합니당
단말기를 서버로 둘 수 있을까요??
PC서버를 하나를 두고,
모든 안드로이드는 클라이언트가되서 서로 통신해야하는게 아닌가 생각이 드네요....;
어떻게든 고정IP를 갖는 서버는 필요하지 않나 생각합니다.
로그인 유지
그냥 자바에서 소켓쓰듯 하면 됩니다
cli
----------------
String serverIP = "192.168.42.21"; //ex: 192.168.0.100
int serverPort = 8000; // ex: 5555
//Toast.makeText(CameraPreview.this, "파일갯수"+file_count, Toast.LENGTH_LONG).show();
try
{
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
try
{
OutputStream out = socket.getOutputStream();
// InputStream is = socket.getInputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
//BufferedReader br = new BufferedReader(new InputStreamReader(is));
String data = file_count+"";
bw.write(data);
bw.flush();
socket.close();
}
catch(Exception e){
System.out.println("연결 실패1");
e.printStackTrace();
}
finally {socket.close();}
}
catch (Exception e) {
System.out.println("연결 실패2");
Log.e("TCP", "C: Error2", e);
}
----ser
System.out.println("소켓 열기 시도");
// Toast.makeText(CameraPreview.this, "소켓시도", Toast.LENGTH_SHORT).show();
try
{
ServerSocket mServerSocket;
mServerSocket=new ServerSocket(8000);
//mServerSocket.bind(null);
Socket mClientSocket = mServerSocket.accept();
// Toast.makeText(CameraPreview.this, "소켓", Toast.LENGTH_LONG).show();
System.out.println("소켓");
OutputStream out = mClientSocket.getOutputStream();
InputStream is = mClientSocket.getInputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(file_path)));
BufferedOutputStream bos = new BufferedOutputStream(mClientSocket.getOutputStream());
wrpath=tempstr+"/final.jpg";
FileOutputStream output = new FileOutputStream(wrpath);
System.out.println("wrpath___"+wrpath);
int size = 0;
byte b[] = new byte[1024];
while(mClientSocket.getInputStream().read(b)>0)
{
output.write(b);
output.flush();
}
output.close();
// Toast.makeText(CameraPreview.this, data, Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
System.out.println("소켓 열기 실패");
}
System.out.println("소켓 열기 완료");
----
일단 제가 하고 있는 부분의 클라/서버입니다
서로 대응되는 부분은 아니고 다른부분이라 그대로 쓰시면 안되겠지만
대충 구조 보시는덴 문제 없을거라 봅니다