ServerSocket是Java语言中的一个类,用于创建服务器端的网络程序。它在Android开发中也起到了同样的作用,也就是用于创建Android客户端向服务器发送请求的程序。下面将对ServerSocket做进一步介绍。
1. ServerSocket原理
在网络中,客户端和服务器之间是通过套接字(Socket)通信。套接字提供了一种可以让进程(程序)之间交换数据的机制。ServerSocket是一个在服务器端监听指定端口的套接字。它主要有三个作用:
- 监听客户端请求,等待客户端发起请求;
- 接受客户端请求,并创建与客户端通信的套接字;
- 处理客户端请求,返回到客户端请求内容。
ServerSocket依靠TCP/IP协议进行通信。在使用ServerSocket时,先由服务器端程序创建出一个ServerSocket对象,并指定监听的端口,当客户端向该端口发起连接请求时,ServerSocket就会接受请求,并创建一个新的Socket与客户端进行通信。
2. 代码实现
下面是使用ServerSocket在Android中实现TCP/IP通信的示例代码:
```
// 服务器端代码
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 创建一个ServerSocket对象,监听指定端口
ServerSocket serverSocket = new ServerSocket(8888);
// 死循环接受客户端请求
while (true) {
// 接受客户端请求,并创建一个新的Socket与客户端进行通信
Socket socket = serverSocket.accept();
// 开启一个新的线程,用于处理客户端的请求
new Thread(new ServerThread(socket)).start();
}
}
}
// 服务端线程代码
import java.io.*;
import java.net.Socket;
public class ServerThread implements Runnable {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 获取输入输出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 读取客户端发来的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String data = reader.readLine();
System.out.println("客户端发来的数据是:" + data);
// 将数据转化为大写后返回到客户端
PrintWriter writer = new PrintWriter(outputStream);
writer.write(data.toUpperCase());
writer.flush();
// 关闭输入输出流
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
上述代码演示了一个简单的TCP/IP通信过程:客户端连接到服务器端的8888端口,然后向服务器发送一条消息,服务器将接收到的消息转为大写并返回到客户端。这里ServerSocket主要用于监听端口,并接受客户端请求,ServerThread则用于处理客户端请求。
3. 注意事项
在使用ServerSocket时应注意以下几点:
- 服务器端应保证在进行网络通信前已获取网络权限;
- 在Android中,不能在主线程中进行网络操作,应将网络操作放入单独的线程中;
- 在使用完ServerSocket后应将其关闭。
总结
本文对ServerSocket进行了简单介绍,讲述了其原理和代码实现,以及使用时需要注意的事项。在Android开发中,ServerSocket通常用于实现客户端和服务器的网络通信。