我搜索了太多,但沒有得到答案,我實際上是從客戶端應用程序發送數據包到局域網中的服務器應用程序,一個客戶端將數據包發送到服務器,另一端的服務器將只接收來自客戶端應用程序的數據包並將數據包存儲在數據庫中,服務器不會向客戶端發送任何答覆,我的服務器是否需要使用線程線程類? 請同時告訴我,我們什麼時候需要線程客戶端或服務器?在局域網中使用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();
}
}
}
}
您的「服務器」是否也在Android中運行?如果它不發送任何答覆,客戶如何知道他們的消息已收到?或者這是不相關的? – Fildor
服務器運行也是android應用程序,我不想把這個東西放在服務器上,讓知道客戶端有關他們發送的消息@Fildor –
你知道,UDP數據包可以丟失,恕不另行通知發件人?所以我想,你知道這一點,應用程序並不需要每個數據包到達服務器。其他問題:客戶如何知道服務器的IP?關於線程:您是否打算使用「服務」?那麼你可能需要一個「處理程序」... – Fildor