problem when using DatagramChannel

Basic Tutorials concerning: GUI, Views, Activites, XML, Layouts, Intents, ...

problem when using DatagramChannel

Postby underarrest » Fri Nov 19, 2010 3:44 am

I have a ListenThread, and a SendThread. All the code works well under JDK1.6, do not know why there are no incoming package, the only difference during debug is the address which is InetSocketAddress, in JDK1.6, it is something like '/192.168.0.101:4666', but in Android 2.1, it is '192.168.0.101/192.168.0.101:4666', which means Android add the hostname onto the address, but I really do not think this kind of change would make the network transmission fail.
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. channel = DatagramChannel.open();
  2.                         channel.socket().bind(new InetSocketAddress(4666));
  3.                         channel.configureBlocking(true);
  4.                         receiver = new ListenThread();
  5.                         receiver.start();
Parsed in 0.030 seconds, using GeSHi 1.0.8.4

sender is initialized in other place.

This is the SendThread
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. private class SendThread extends Thread{
  2.                 private boolean stop = false;
  3.                
  4.                 public SendThread(){
  5.                         super("This is the Sender Thread");
  6.                 }
  7.                 public void stopSender(){
  8.                         this.stop = true;
  9.                         this.interrupt();
  10.                 }
  11.                
  12.                 public void run(){
  13.                         while(!send_packet_queue.isEmpty()){
  14.                                 try{
  15.                                         if(stop) return;
  16.                                         Packet packet = send_packet_queue.poll();
  17.                                         ByteBuffer sendBuffer = packet.getPacketData();
  18.                                         InetSocketAddress tempTarget = packet.target;
  19.                                         sendBuffer.position(0);
  20.                                         channel.send(sendBuffer, tempTarget);
  21.                                         System.out.println("End Sending Info to" + tempTarget+
  22.                                                                 "---------------");
  23.                                        
  24.                                 }catch(Exception e){
  25.                                         e.printStackTrace();
  26.                                 }
  27.                         }
  28.                 }
  29.                
  30.         }
  31.  
Parsed in 0.034 seconds, using GeSHi 1.0.8.4


This is the ListenThread
Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1. private class ListenThread extends Thread{
  2.                 private boolean stop = false;
  3.                 ByteBuffer buffer = Utils.getByteBuffer(1024);
  4.                 public ListenThread(){
  5.                         super("This is the Listen Thread");
  6.                 }
  7.                 public void stopListener(){
  8.                         this.stop = true;
  9.                         this.interrupt();
  10.                 }
  11.                
  12.                 public void run(){
  13.                         while(!stop){
  14.                                 try{
  15.                                         buffer.clear();
  16.                                         System.out.println("Begin Listening------------");
  17.                                         SocketAddress senderAddress = channel.receive(buffer);
  18.                                         //////////////////////////////////////////////////////////////////////////
  19.                                         System.out.println("received request from other peer called: "+ senderAddress);
  20.                                         buffer.limit(buffer.position());
  21.                                        
  22.                                         long x = System.currentTimeMillis();
  23.                                         ByteBuffer rawData = Utils.getByteBuffer(buffer.limit());
  24.                                         buffer.position(0);
  25.                                         rawData.position(0);
  26.                                         rawData.put(buffer);
  27.                                        
  28.                                         rawData.position(0);
  29.                                         Packet rawPacket = new Packet(rawData, (InetSocketAddress)senderAddress);
  30.                                         long y = System.currentTimeMillis();
  31.                                         DDB.getSingleton().receivePacket(rawPacket);
  32.                                 }catch(Exception e){
  33.                                         e.printStackTrace();
  34.                                 }
  35.                         }
  36.                 }
  37.         }
  38.  
Parsed in 0.038 seconds, using GeSHi 1.0.8.4


Hope someone can help me out, thanks
underarrest
Freshman
Freshman
 
Posts: 2
Joined: Fri Nov 19, 2010 3:22 am

Top

Re: problem when using DatagramChannel

Postby underarrest » Tue Nov 23, 2010 1:19 am

anybody can help??
underarrest
Freshman
Freshman
 
Posts: 2
Joined: Fri Nov 19, 2010 3:22 am

Top

Return to Novice Tutorials

Who is online

Users browsing this forum: No registered users and 4 guests