package com.example.appser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends Activity {
String message = "";
ServerSocket serverSocket;
Paint pnt = new Paint();
MainView mainView;
int[] x = new int[12];
int[] y = new int[12];
int[] color = new int[12];
//Socket sock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("test", "wwwwwwwwwwwwstart");
setContentView(R.layout.activity_main);
//각원 좌표값 위치설정
x[0] = 280;
y[0] = 110;
x[1] = 270;
y[1] = 230;
x[2] = 190;
y[2] = 260;
x[3] = 110;
y[3] = 290;
x[4] = 150;
y[4] = 480;
x[5] = 220;
y[5] = 650;
x[6] = 460;
y[6] = 110;
x[7] = 460;
y[7] = 230;
x[8] = 540;
y[8] = 260;
x[9] = 620;
y[9] = 290;
x[10] = 600;
y[10] = 480;
x[11] = 510;
y[11] = 650;
for(int i = 0; i < 12; i ++)
{
// x[i] = 100 + 100*i;
// y[i] = 100 + 100*i;
color[i] = Color.BLACK;
}
mainView = new MainView(this);
setContentView(mainView);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
protected class MainView extends View {
private int mPintSize = 0;
private Map<Integer, Integer> mPointSizeMap = new HashMap<Integer, Integer>();
private Map<Integer, Integer> mPointItemSizeMap = new HashMap<Integer, Integer>();
public MainView(Context context) {
super(context);
mPointSizeMap.put(0, 10);
mPointSizeMap.put(1, 20);
mPointSizeMap.put(2, 30);
mPointSizeMap.put(3, 40);
mPointSizeMap.put(4, 50);
mPointSizeMap.put(5, 60);
mPointSizeMap.put(6, 70);
new Thread(new Runnable() {
public void run() {
while(true){
try {
serverSocket = new ServerSocket(5000, 10);
//Socket sock = new Socket("172.30.1.16", 5678);
//app을 클라이언트로 바꿀시 ip주소 찾는버ㅂ
while (true) {
Socket sock = serverSocket.accept();
InetAddress inetaddr = sock.getInetAddress();
OutputStream out = sock.getOutputStream();
InputStream in = sock.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
int aplug, index;
int flag = 0, count = 0;;
while((line = br.readLine()) != null){
aplug = Integer.parseInt(line);
index = aplug / 10000;
aplug = aplug % 10000;
Log.d("test", "wwwwwww"+aplug+", index = "+index);
if(index == 0)
{
if(aplug != 0)
flag = 1;
else if (flag == 1)
{
flag = 0;
count++;
}
}
mPointItemSizeMap.put(index, getPointItemSize(aplug));
postInvalidate();
// ondraw 다시 호출
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private int getPointItemSize(int aplug) {
int mRet = 0;
if (aplug >=800){
mRet = 0;
}else if (aplug < 800 && aplug >= 600){
mRet = 1;
}else if (aplug < 600 && aplug >= 400){
mRet = 2;
}else if (aplug < 400 && aplug >= 200){
mRet = 3;
}else if (aplug < 200 && aplug >= 30){
mRet = 4;
}else if (aplug < 30 && aplug >= 10){
mRet = 5;
}else if (aplug < 10){
mRet = 6;
}else{
throw new IllegalAccessError("에러");
}
return mRet;
}
}).start();
}
private final int DEFAULT_SIZE = 5;
public void onDraw(Canvas canvas) {
// canvas.drawColor(Color.WHITE);
// Paint 생성 & 속성 지정
Paint Pnt = new Paint();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.foot);
Rect rtDest = new Rect(0, 0, 740, 800);
canvas.drawBitmap(bitmap, null, rtDest, null);
for (int i = 0; i < 12; i++) {
pnt.setStyle(Style.FILL);
pnt.setStrokeWidth(1);
// pnt.setColor(color[i]);
pnt.setColor(Color.RED);
Log.e("suein", "index = "+i+", value = "+mPointItemSizeMap.get(i));
Integer mPointSize = mPointSizeMap.get(mPointItemSizeMap.get(i));
if (mPointSize == null) {
canvas.drawCircle(x[i], y[i], DEFAULT_SIZE, pnt);
} else {
canvas.drawCircle(x[i], y[i], mPointSize, pnt);
}
// x축 , y축 , 반지름 설정하는것
}
}
}
}
클라이언트 하나에서는 데이터를 받는것을 확인하였는데 두개의클라이언트를 하려고 할때 문제가 있어서 올립니다. 서버에 소켓을 두개생성해야되고 스레드도 손을 봐야한다는데.. 어떤식으로 하는지 잘 모르겟습니다.. 소스 수정을 어디를 해야되는것일까요 ㅜㅜ