마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

udp 통신하는데요 송신이 안됩니다

0 추천

안녕하세요 며칠째 udp 로 삽질하고 있는 뉴비입니다

 

피씨와 스마트폰간에 udp 통신을 하고자 합니다 

 

일단 자세한건 밑에부터;;

 

onCreate()

안에는 try {

socket = new DatagramSocket(SERVERPORT);
 
socket.setBroadcast(true);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
clientAddr=InetAddress.getByName("192.168.43.58");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
udp_send = new SendData();
udp_recv = new RecvData();
udp_send.start();
udp_recv.start();
 
이렇게 넣었구요
 
송수신 쓰레드는 아래와 같습니다
public class RecvData extends Thread
{
   @Override 
   public void run() {   
       // TODO Auto-generated method stub
       
       //ma.notice.setText("Server start");
       StrictMode.enableDefaults();
 
       try {   
 
        byte[] buf = new byte[17];
  while(true)
  {
 
byte[] buffer = new byte[1000];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet); 
 
//String s="Test!";
//packet = new DatagramPacket(s.getBytes(), s.getBytes().length, clientAddr, clientPort);
           
            //Log.d("UDP", "S: Sending: '" + s + "'");   
            socket.send(packet);
 
// 패킷의 데이터는 버리고, 아이피주소만 핸들러로 전송
Message message = handler.obtainMessage(1, packet.getAddress().getHostAddress());
handler.sendMessage(message);
  }          
}
catch (Exception e)
{   
            Log.e("UDP", "S: Error", e); 
}
   }
   
   public void onClose()
   {
socket.close();
   }
   
   public void close()
   {
    socket.close();
   }
   
}
 
    //public void SendData(String data)
    public class SendData extends Thread
    {
    public void run()
    {
/* By magic we know, how much data will be waiting for us */  
//byte[] buf = new byte[17];   
            /* Prepare a UDP-Packet that can  
             * contain the data we want to receive */
             StrictMode.enableDefaults();
            try
            {
            Log.d("SOCKET : " ,socket.toString());
           packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getByName(CLIENTIP), SERVERPORT);
           Log.d("UDP", "S: Sending: '" + data + "'");
            
           socket.send(packet);
}
catch(IOException e)
{
Log.d("Send IOException : ", e.getMessage());
e.printStackTrace();
}
            /*
            catch(UnknownHostException e)
            {
            Log.d("Send UnknownException : ", e.getMessage());
            }
            */ catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    }
}
 
일단 제쪽에서 수신후 송신은 됩니다 (특정시간 동안만요)
근데 제쪽에서 먼저 송신을 하려고 하면 송신이 되지 않습니다
뭐가 문제일까요;

 

 

갈로 (690 포인트) 님이 2013년 12월 19일 질문

1개의 답변

0 추천
먼저 송신을 하려고 할때 송신받을 데이터가 있는데도 못 받는 상황인건가요?

아니면 받을 데이터가 없어서 블러킹이 발생되고 있는건가요?

아마도 블러킹이 발생되고 있다면, 받을 데이터가 있는지 확인후 receive를 걸어 놓으면

정상 동작하지 않을까 싶은데요.

 

그럼 수고 하세요.
철수야안녕 (6,120 포인트) 님이 2013년 12월 20일 답변
...