1.android 3.0 以后的网络操作要放在单独放在线程里。
2.添加权限
<!-- 允许应用程序打开Socket -->
<uses-permission android:name="android.permission.INTERNET" />
3.服务器线程:
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import android.util.Log;
public class ServerThread implements Runnable {
ServerSocket serverSocket = null;
@Override
public void run() {
// TODO Auto-generated method stub
try {
serverSocket = new ServerSocket(7777);
while (true) {
Log.d("Comtest3", "wait for data...");
Socket socket = serverSocket.accept();
Log.d("Comtest3", "there is data...");
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream()));
// 写字符串
writer.write("服务器的数据已经接受到!");
writer.flush();
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
Log.d("Comtest3", "异常");
e.printStackTrace();
}
}
}
客户端的线程:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import android.util.Log;
public class ClientThread implements Runnable{
Socket socket = null;
private String line;
@Override
public void run() {
// TODO Auto-generated method stub
try {
socket = new Socket("192.168.43.71", 7777);
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
line = br.readLine();
br.close();
Log.i("comtest3", line);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
4.分析:
首先服务器ServerSocket启动,调用accept()方法等待客户端Socket发起连接;然后服务器用BufferedWriter向ServerSocket.getOutputStream()写字符串,发送到客户端;客户端用BufferedReader读getInputStream()的字符串输出到日志