下面是针对“Android开发之Socket通信传输简单示例”的完整攻略:
1. 简介
本示例将介绍如何使用Android开发中的Socket通信来进行数据传输,其中Android作为客户端发送数据,Java服务器进行接收和处理数据。
2. 创建服务器端
首先,我们需要在Java中创建一个服务器端,用于接收来自Android客户端的数据。代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(7777);
System.out.println("等待客户端连接。。。");
Socket client = serverSocket.accept();
System.out.println("客户端已连接");
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String msg = in.readLine();
System.out.println("收到客户端发来的消息:" + msg);
in.close();
client.close();
serverSocket.close();
}
}
这段代码创建了一个在端口号为7777的服务器监听连接请求。如果客户端连接成功,就接收并输出客户端发送的消息。
3. 创建客户端
接下来,我们需要在Android中创建一个客户端,用于连接服务器和发送数据。
首先,在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
然后,在MainActivity中添加以下代码:
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private Button sendBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendBtn = findViewById(R.id.send_btn);
sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new SocketTask().execute(); //执行异步任务,连接服务器并发送数据
}
});
}
private class SocketTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
try {
Socket socket = new Socket("192.168.1.100", 7777); //连接服务器
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
out.write("Hello Server"); //发送数据
out.flush();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}
这段代码创建了一个异步任务,用于连接服务器并发送数据。其中,SocketTask中的doInBackground()方法是异步执行的,用于连接服务器和发送数据。你需要根据实际情况修改其中的IP地址和端口号,确保其与服务器端的监听一致。
4. 运行程序
现在可以运行程序了,首先启动Java服务器端,然后在Android客户端中点击发送按钮,即可将数据发送到服务器端。
5. 示例说明
示例1:多客户端连接服务器
如果需要支持多个客户端同时连接服务器端,并实现数据传输,则需要将服务器端的代码进行修改以实现多线程。示例代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(7777);
int count = 0;
System.out.println("等待客户端连接。。。");
while (true) {
Socket client = serverSocket.accept();
count++;
System.out.println("客户端" + count + "已连接");
new Thread(new ServerThread(client, count)).start();
}
}
}
class ServerThread implements Runnable {
private Socket client;
private int clientNum;
public ServerThread(Socket client, int clientNum) {
this.client = client;
this.clientNum = clientNum;
}
@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String msg;
while ((msg = in.readLine()) != null) {
System.out.println("客户端" + clientNum + "发送消息:" + msg);
}
in.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
其中,ServerThread为服务器端多线程的处理类,用于实现多个客户端的连接。
示例2:客户端接收服务器端发送的数据
如果需要实现客户端接收服务器端发送的数据,则需要在Android客户端中添加接收数据的代码。示例代码如下:
private class SocketTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
try {
Socket socket = new Socket("192.168.1.100", 7777); //连接服务器
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg = in.readLine(); //接收数据
in.close();
socket.close();
return msg;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//在UI线程更新UI界面,显示服务器端发送的数据
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
}
其中,SocketTask中的doInBackground()方法用于连接服务器和接收数据,而onPostExecute()方法则用于在UI线程更新UI界面,显示服务器端发送的数据。
以上就是有关“Android开发之Socket通信传输简单示例”的完整攻略了,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发之Socket通信传输简单示例 - Python技术站