2013-08-25 100 views
0

我搜索了太多,但沒有得到答案,我實際上是從客戶端應用程序發送數據包到局域網中的服務器應用程序,一個客戶端將數據包發送到服務器,另一端的服務器將只接收來自客戶端應用程序的數據包並將數據包存儲在數據庫中,服務器不會向客戶端發送任何答覆,我的服務器是否需要使用線程線程類? 請同時告訴我,我們什麼時候需要線程客戶端或服務器?在局域網中使用Datagramsockets在局域網中監聽UDP服務器

在此先感謝您的幫助。

public class MainActivity extends Activity { 

private DatagramSocket socket; 
String str; 
EditText et; 
Button bt; 
private static final int SERVERPORT = 6000; 
private static final String SERVER_IP = "192.168.1.255"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);  

    bt=(Button)findViewById(R.id.myButton); 
    bt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


      et = (EditText) findViewById(R.id.EditText01); 
      str = et.getText().toString(); 
       new Thread(new ClientThread()).start(); 
     } 
    }); 



} 


class ClientThread implements Runnable { 

    @Override 
    public void run() { 


     try { 
      socket = new DatagramSocket(SERVERPORT); 
     } catch (SocketException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      InetAddress serverAddr = null; 
      try { 
       serverAddr = InetAddress.getByName(SERVER_IP); 
      } catch (UnknownHostException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     DatagramPacket packet = newDatagramPacket(str.getBytes(),str.length(),serverAddr,SERVERPORT); 
       try { 
        socket.send(packet); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
     } 

    } 

} 
+0

您的「服務器」是否也在Android中運行?如果它不發送任何答覆,客戶如何知道他們的消息已收到?或者這是不相關的? – Fildor

+0

服務器運行也是android應用程序,我不想把這個東西放在服務器上,讓知道客戶端有關他們發送的消息@Fildor –

+0

你知道,UDP數據包可以丟失,恕不另行通知發件人?所以我想,你知道這一點,應用程序並不需要每個數據包到達服務器。其他問題:客戶如何知道服務器的IP?關於線程:您是否打算使用「服務」?那麼你可能需要一個「處理程序」... – Fildor

回答

0

UDP服務器不需要是多線程的。你只需要一個套接字,並且沒有連接,所以沒有必要使用線程。

+0

和客戶端,它需要多線程或不?客戶端的目的是將消息發送到LAN上的服務器。 –

+0

如果使用阻塞I/O,我會給它自己的線程(但只是那一個),但。你會同意,@EJP? – Fildor

+0

@AmeerHumza在客戶端中,您可以使用[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html)進行發送,以避免阻止GUI。 – Fildor

相關問題