안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요
제가 간단한 카드게임을 만들고 있는데요
예전에 C#으로 짰던것을 안드로이드로 짜서 소켓으로 네트워크로 같이 할 수 있게 만드는 중입니다.
c#이나 안드로이드 둘 다 서버가 될수도 있고 클라이언트가 될수도 있습니다.
현재 c#과 c#간엔 문제가 없고 c#과 안드로이드 그리고 안드로이드와 안드로이드 간 통신에 약간 문제가 있습니다.
현재 게임진행은 잘 되는데(string은 문제없이 잘 됩니다.)
시작할때 자신이 고른 사진(캐릭터)을 서로 전송하여 각각의 화면에 띄워야 하는데
이 부분이 잘 안됩니다.
각각이 고른 사진을 비트맵으로 얻어와서 이것을 byte[]로 변환하여 보내고 있습니다.
이미지를 보내고 받는 부분의 소스코드는
c#서버
안드로이드 서버
이렇게 코딩을 했는데 어떤 경우에는 이미지가 다 뜰때도 있고
어느정도만 뜨다가 아랫부분은 까맣게 나올때도 있습니다.
안드로이드에서 서버를 돌리면 가끔 아예 이미지가 안넘어올때도 있구요
안드로이드와 안드로이드간에도 이미지전송이 잘 안됩니다.
코딩방식이 잘못된 걸까요?
게임진행에는 아무런 문제가 없는데 이부분에서 며칠째 애먹고 있네요ㅠㅠ
고수님들 도와주세요
제가 간단한 카드게임을 만들고 있는데요
예전에 C#으로 짰던것을 안드로이드로 짜서 소켓으로 네트워크로 같이 할 수 있게 만드는 중입니다.
c#이나 안드로이드 둘 다 서버가 될수도 있고 클라이언트가 될수도 있습니다.
현재 c#과 c#간엔 문제가 없고 c#과 안드로이드 그리고 안드로이드와 안드로이드 간 통신에 약간 문제가 있습니다.
현재 게임진행은 잘 되는데(string은 문제없이 잘 됩니다.)
시작할때 자신이 고른 사진(캐릭터)을 서로 전송하여 각각의 화면에 띄워야 하는데
이 부분이 잘 안됩니다.
각각이 고른 사진을 비트맵으로 얻어와서 이것을 byte[]로 변환하여 보내고 있습니다.
이미지를 보내고 받는 부분의 소스코드는
c#서버
Bitmap NewImg = new Bitmap(myImage, new Size(80, 100)); //비트맵사이즈를 변경하고 byte[] sendBmp = Util.ImageToByteArray(NewImg); //비트맵을 byte[]로 변환하고 clntSock.Send(sendBmp); //보냅니다. byte[] rMsg = new byte[10240000]; clntSock.Receive(rMsg); //byte[]을 받아와서 Image img = Util.BytesToImg(rMsg); //Image객체로 변환합니다.c#클라이언트
byte[] rMsg = new byte[10240000]; clntSock.Receive(rMsg); Image img = Util.BytesToImg(rMsg); Bitmap NewImg = new Bitmap(myImage, new Size(80, 100)); byte[] sendBmp = Util.ImageToByteArray(NewImg); clntSock.Send(sendBmp);서버와 클라이언트 차이점은 서버가 먼저 보내고 받고, 클라이언트는 먼저 받고 보내는 차이입니다.
안드로이드 서버
Socket clnt;
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(clnt.getOutputStream()));
DataInputStream dis=new DataInputStream(new BufferedInputStream(clnt.getInputStream()));
try {
dos.write(bmpByte); //bmpByte는 비트맵을 byte[]로 변환시킨것입니다.
dos.flush();
Thread.sleep(500); //슬립을 안하면 c#으로부터 이미지를 아예못읽어오는것같아요
dis.read(rMsg); //rMsg는 받아올 byte[]입니다.
Bitmap bmp=Util.byteArrayToBitmap(rMsg); //받아온 byte[]을 비트맵으로 변환
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}안드로이드 클라이언트
Socket clnt;
DataOutputStream dos=new DataOutputStream(new BufferedOutputStream(clnt.getOutputStream()));
DataInputStream dis=new DataInputStream(new BufferedInputStream(clnt.getInputStream()));
try {
Thread.sleep(500);
dis.read(rMsg);
Bitmap bmp = Util.byteArrayToBitmap(rMsg);
dos.write(Setting.bmpByte);
dos.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}안드로이드 역시 서버일경우 먼저 보내고 받아오고, 클라이언트일경우 먼저 받고 보냅니다.이렇게 코딩을 했는데 어떤 경우에는 이미지가 다 뜰때도 있고
어느정도만 뜨다가 아랫부분은 까맣게 나올때도 있습니다.
안드로이드에서 서버를 돌리면 가끔 아예 이미지가 안넘어올때도 있구요
안드로이드와 안드로이드간에도 이미지전송이 잘 안됩니다.
코딩방식이 잘못된 걸까요?
게임진행에는 아무런 문제가 없는데 이부분에서 며칠째 애먹고 있네요ㅠㅠ
고수님들 도와주세요



