android通过网络协议TCP进行socket的通信的Demo。
测试可用。
一、创建客户端
protected void connectSocket() {
Socket socket;
try {
// 创建一个Socket对象,并指定服务端的IP及端口号
socket = new Socket("10.10.10.11", 9821);
// 创建一个InputStream用户读取要发送的文件。
InputStream inputStream = new FileInputStream("/data/local/tmp/version.txt");
// 获取Socket的OutputStream对象用于发送数据。
OutputStream outputStream = socket.getOutputStream();
// 创建一个byte类型的buffer字节数组,用于存放读取的本地文件
byte buffer[] = new byte[4 * 1024];
int temp = 0;
// 循环读取文件
while ((temp = inputStream.read(buffer)) != -1) {
// 把数据写入到OuputStream对象中
outputStream.write(buffer, 0, temp);
Log.i("ServerReceviedByTcp","send buffer=" + (new String(buffer, 0, temp)));
}
// 发送读取的数据到服务端
outputStream.flush();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
二、创建服务器端
public void createServerRecevied() {
// 声明一个ServerSocket对象
ServerSocket serverSocket = null;
try {
// 创建一个ServerSocket对象,并让这个Socket在9821端口监听
serverSocket = new ServerSocket(9821);
// 调用ServerSocket的accept()方法,接受客户端所发送的请求,
// 如果客户端没有发送数据,那么该线程就停滞不继续
Socket socket = serverSocket.accept();
// 从Socket当中得到InputStream对象
InputStream inputStream = socket.getInputStream();
byte buffer[] = new byte[1024 * 4];
int temp = 0;
// 从InputStream当中读取客户端所发送的数据
while ((temp = inputStream.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, temp));
Log.i("ServerReceviedByTcp","recevie buffer=" + (new String(buffer, 0, temp)));
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
三、总结
1、IP地址
安卓手机默认的ip地址是:127.0.0.1,如果是其他地址是,socket连接会失败,并且报错;
通过adb查看和设置静态IP的方法:
adb shell ifconfig
adb shell ifconfig lo 10.10.10.10 netmask 255.255.255.0
2、端口号
端口号只要不与系统端口号和其他应用端口号相冲突即可。
通过adb查看已经被占用的端口号:
adb shell netstat -a no
3、数据传输
通过OutputStream和InputStream 进行数据传输,socket.getOutputStream()和socket.getInputStream()。