Android App2014.05.13 14:52

피씨와 폰과의 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();
    }
   }
  });

 

참조 : http://blog.naver.com/PostView.nhn?blogId=aoba0203&logNo=130169841108&beginTime=0&jumpingVid=&from=section&redirect=Log&widgetTypeCall=true

Posted by 동동(이재동)