피씨와 폰과의 UDP 연결을 위해서 만들어 보았다.
일단 서버 부분이다.
만약 이렇게 쓰레드를 이용하지 않으면 UI가 나오기전에 계속 메세지를 리시브 받을 준비를 함으로 UI가 나오지 않는다.
쓰레드를 이용해서 메세지는 메세지대로 받고 다른 처리는 다른처리대로 하자.
static으로 해야하며 UI Update는 c# 의 Dispatcher가 없는데 post라는 메소드가 있어서 이용하였다.
static String msg;
private static void runUdpServer() {
new Thread(new Runnable() {
public void run() {
try{
int serverPort = 11000;
DatagramSocket socket = new DatagramSocket(serverPort);
while(true)
{
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
msg = new String(packet.getData(),0,packet.getLength());
recieveMsgTextView.post(new Runnable(){
public void run() {
recieveMsgTextView.setText(msg);
}
});
}
}catch(Exception e)
{
Log.d("test","r: Error");
}
}
}).start();
}
이건 안드로이드에서 메세지를 보내는 부분이다. 보내는부분은 쓰레드를 특별히 이용하지 않았다.
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Button clickedButton = (Button) v;
try {
byte[] buf = MsgEditText.getText().toString().getBytes();
InetAddress serverAddr = InetAddress
.getByName("192.168.10.37");
DatagramSocket socket = new DatagramSocket();
DatagramPacket out_datagramPacket = new DatagramPacket(buf,
buf.length, serverAddr, 12800);
socket.send(out_datagramPacket);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
'Android App' 카테고리의 다른 글
[android] string.xaml에 정의된 string 사용하기 (0) | 2014.05.26 |
---|---|
[android] 3G 인지 WIFI인지 체크하기 (0) | 2014.05.26 |
[android] 직접실행창이 없는 이클립스에서 비슷하게 구현하기(inspect 이용) (0) | 2014.05.15 |
[android] Thread에서 UI Update하기 (0) | 2014.05.13 |
[Android] 자기 아이피 받기 (0) | 2014.05.09 |