Android tcp socket.getInputStream read
时间: 2023-11-08 08:12:13 浏览: 144
在Android中,使用TCP Socket进行网络通信时,可以使用如下代码读取输入流(InputStream)中的数据:
```java
Socket socket = new Socket("host", port);
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer); // 阻塞读取输入流中的数据
String data = new String(buffer, 0, len);
```
其中,`inputStream.read(buffer)`是一个阻塞方法,会一直等待输入流中有数据可读取,直到读取到数据或者发生异常才会返回。读取到的数据将会存储在`buffer`数组中,返回值`len`表示实际读取到的字节数。最后,可以将字节数组转换为字符串类型的数据,以便后续处理。需要注意的是,这里的读取操作是在主线程中执行的,如果需要避免阻塞主线程,可以将读取操作放到子线程中执行。
相关问题
package socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class SimpleTCPServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8885); // 1、创建服务器,指定端口 while(true) { Socket socket = server.accept();// 2、接收客户端连接 阻塞式 Handler handler = new Handler(socket); handler.start(); } } } class Handler extends Thread{ private Socket socket; public Handler(Socket socket) { this.socket = socket; } public void run() { InputStream dis = null; OutputStream dos = null; System.out.println("线程名称:" + Thread.currentThread().getName()); try { dis = socket.getInputStream(); dos = socket.getOutputStream(); byte[] buf = new byte[1024]; int len = dis.read(buf); String msg = new String(buf,0,len); System.out.println("服务端从客户端接收到: " + msg); String echo = "欢迎"; dos.write(echo.getBytes()); // 3、发送数据 dos.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { dos.close(); dis.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
这是一个简单的TCP服务器端的Java代码,可以监听客户端连接并接收消息,然后发送欢迎消息。代码流程如下:
1. 创建ServerSocket对象,并指定端口号为8885;
2. 通过ServerSocket对象的accept()方法阻塞式地等待客户端连接,一旦有客户端连接则创建一个Handler对象处理该连接;
3. Handler类继承了Thread类,重写了run()方法,其中获取到了与客户端通信的InputStream和OutputStream对象,通过read()方法读取客户端发送来的数据,并将读取到的字节数据转换为字符串类型后输出到控制台;
4. 将欢迎消息转换为字节数组后通过write()方法发送给客户端,并调用flush()方法刷新输出流;
5. 在finally块中关闭数据输入流、数据输出流和Socket对象。
需要注意的是,这是一个单线程的服务器端程序,每次只能处理一个客户端连接,如果需要同时处理多个客户端连接,则需要使用多线程或NIO技术。
android tcp socket
在 Android 中使用 TCP socket 进行网络通信可以分为以下步骤:
1. 创建一个 Socket 对象,并指定服务器的 IP 地址和端口号:
```java
Socket socket = new Socket(serverAddress, serverPort);
```
2. 使用输入输出流进行数据的读写:
```java
// 获取输入输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 发送数据
String message = "Hello, server!";
outputStream.write(message.getBytes());
// 接收数据
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String receivedMessage = new String(buffer, 0, len);
```
3. 在使用完毕后,关闭 socket 连接:
```java
socket.close();
```
需要注意的是,网络通信必须在子线程中进行,否则会阻塞主线程。可以使用 AsyncTask 或者线程池等方式来实现。同时,网络请求需要添加网络权限:
```xml
<uses-permission android:name="android.permission.INTERNET" />
```
以上是一个简单的 TCP socket 通信的示例,具体实现还需要根据自己的业务需求进行调整。
阅读全文