日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android端与服务端差别,Android客户端和服务器端编程

發布時間:2025/4/5 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android端与服务端差别,Android客户端和服务器端编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試運行我在網上找到的服務器端和客戶端示例.

這是服務器:

public class ServerActivity extends Activity {

private TextView serverStatus;

private TextView serverStatus2;

// DEFAULT IP

public static String SERVERIP = "10.100.102.15";

// DESIGNATE A PORT

public static final int SERVERPORT = 8080;

private Handler handler = new Handler();

private ServerSocket serverSocket;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_server);

serverStatus = (TextView) findViewById(R.id.server_status);

serverStatus2 = (TextView) findViewById(R.id.server_status2);

SERVERIP = getLocalIpAddress();

Thread fst = new Thread(new ServerThread());

fst.start();

}

public class ServerThread implements Runnable {

public void run() {

try {

if (SERVERIP != null) {

handler.post(new Runnable() {

@Override

public void run() {

serverStatus

.setText("Listening on IP: " + SERVERIP);

}

});

serverSocket = new ServerSocket(SERVERPORT);

while (true) {

// LISTEN FOR INCOMING CLIENTS

Socket client = serverSocket.accept();

handler.post(new Runnable() {

@Override

public void run() {

serverStatus2.setText("Connected.");

}

});

try {

BufferedReader in = new BufferedReader(

new InputStreamReader(

client.getInputStream()));

String line = null;

while ((line = in.readLine()) != null) {

Log.d("ServerActivity", line);

handler.post(new Runnable() {

@Override

public void run() {

// DO WHATEVER YOU WANT TO THE FRONT END

// THIS IS WHERE YOU CAN BE CREATIVE

}

});

}

break;

} catch (Exception e) {

handler.post(new Runnable() {

@Override

public void run() {

serverStatus

.setText("Oops. Connection interrupted. Please reconnect your phones.");

}

});

e.printStackTrace();

}

}

} else {

handler.post(new Runnable() {

@Override

public void run() {

serverStatus

.setText("Couldn't detect internet connection.");

}

});

}

} catch (final Exception e) {

handler.post(new Runnable() {

@Override

public void run() {

serverStatus.setText("Error" + e.getMessage());

}

});

e.printStackTrace();

}

}

}

// GETS THE IP ADDRESS OF YOUR PHONE'S NETWORK

private String getLocalIpAddress() {

try {

for (Enumeration en = NetworkInterface

.getNetworkInterfaces(); en.hasMoreElements();) {

NetworkInterface intf = en.nextElement();

for (Enumeration enumIpAddr = intf

.getInetAddresses(); enumIpAddr.hasMoreElements();) {

InetAddress inetAddress = enumIpAddr.nextElement();

if (!inetAddress.isLoopbackAddress()) {

return inetAddress.getHostAddress().toString();

}

}

}

} catch (SocketException ex) {

Log.e("ServerActivity", ex.toString());

}

return null;

}

@Override

protected void onStop() {

super.onStop();

try {

// MAKE SURE YOU CLOSE THE SOCKET UPON EXITING

serverSocket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

這是客戶的代碼:

public class ClientActivity extends Activity {

private EditText serverIp;

private Button connectPhones;

private String serverIpAddress = "";

private boolean connected = false;

//private Handler handler = new Handler();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_client);

serverIp = (EditText) findViewById(R.id.server_ip);

connectPhones = (Button) findViewById(R.id.connect_phones);

connectPhones.setOnClickListener(connectListener);

}

private OnClickListener connectListener = new OnClickListener() {

@Override

public void onClick(View v) {

if (!connected) {

serverIpserverIpAddress = serverIp.getText().toString();

if (!serverIpAddress.equals("")) {

Thread cThread = new Thread(new ClientThread());

cThread.start();

}

}

}

};

public class ClientThread implements Runnable {

public void run() {

try {

InetAddress serverAddr = InetAddress.getByName(serverIpAddress);

Log.d("ClientActivity", "C: Connecting...");

Socket socket = new Socket(serverAddr,

8080);

connected = true;

while (connected) {

try {

Log.d("ClientActivity", "C: Sending command.");

PrintWriter out = new PrintWriter(

new BufferedWriter(new OutputStreamWriter(

socket.getOutputStream())), true);

// WHERE YOU ISSUE THE COMMANDS

out.println("Hey Server!");

Log.d("ClientActivity", "C: Sent.");

} catch (Exception e) {

Log.e("ClientActivity", "S: Error", e);

}

}

socket.close();

Log.d("ClientActivity", "C: Closed.");

} catch (Exception e) {

Log.e("ClientActivity", "C: Error", e);

connected = false;

}

}

}

}

當在同一個eclipse模擬器上運行上面的命令時,服務器拋出異常“Socket Closed”,甚至沒有達到while循環“while(true)”.有人知道為什么嗎?

這是控制臺的輸出:

Android Launch!

adb is running normally.

Performing com.example.server.ServerActivity activity launch

Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'android2.3'

Uploading server.apk onto device 'emulator-5554'

Installing server.apk...

Success!

Starting activity com.example.server.ServerActivity on device emulator-5554

ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.server/.ServerActivity }

------------------------------

Android Launch!

adb is running normally.

Performing com.example.client.ClientActivity activity launch

Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'android2.3'

Application already deployed. No need to reinstall.

Starting activity com.example.client.ClientActivity on device emulator-5554

ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.client/.ClientActivity }

這是LogCat輸出:

08-08 13:04:38.165: D/ClientActivity(360): C: Connecting...

08-08 13:04:38.176: E/ClientActivity(360): C: Error

08-08 13:04:38.176: E/ClientActivity(360): java.net.ConnectException: /10.0.2.15:50907 - Connection refused

08-08 13:04:38.176: E/ClientActivity(360): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:207)

08-08 13:04:38.176: E/ClientActivity(360): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)

08-08 13:04:38.176: E/ClientActivity(360): at java.net.Socket.startupSocket(Socket.java:705)

08-08 13:04:38.176: E/ClientActivity(360): at java.net.Socket.(Socket.java:263)

08-08 13:04:38.176: E/ClientActivity(360): at com.example.client.ClientActivity$ClientThread.run(ClientActivity.java:58)

08-08 13:04:38.176: E/ClientActivity(360): at java.lang.Thread.run(Thread.java:1019)

08-08 13:04:40.456: W/IInputConnectionWrapper(360): showStatusIcon on inactive > > > InputConnection

解決方法:

解決了IT,http://developer.android.com/tools/devices/emulator.html.

問題是默認的android模擬器實例只能與自身和以太網交互,因此不同的實例不能相互聯網.

如果要這樣做,首先必須在實例中設置重定向.

閱讀本頁它有點像…很多:D

標簽:android-networking,android,sockets

來源: https://codeday.me/bug/20190831/1777224.html

總結

以上是生活随笔為你收集整理的android端与服务端差别,Android客户端和服务器端编程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。