目标
Demo是通过Java ServerSocket 和 Socket 通信实现客户端发送消息和发送文件到服务器,服务器接收到消息和文件,并且实现解决inputStream.read()的阻塞问题思路。
服务器端
创建ServerSocket服务器
serverSocket = new ServerSocket(port);//首先创建一个服务端口
//等待客户端的连接请求
socket = serverSocket.accept();
等待Socket客户端连接
//等待客户端的连接请求
socket = serverSocket.accept();
final String socketAddress = socket.getRemoteSocketAddress().toString();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ServerActivity.this, "成功建立与客户端的连接 : " + socketAddress, Toast.LENGTH_SHORT).show();
Log.i("Lin", "成功建立与客户端的连接 : " + socketAddress);
}
});
接收Socket客户端信息
为了防止接收消息时,服务器inputStream.read()读取消息时产生阻塞,以换行符**("\n")结束inputStream.read()**
byte[] bytes = new byte[1];
StringBuilder info = new StringBuilder();
while (inputStream.read(bytes) != -1) {
String str = new String(bytes);
if (str.equals("\n")) {
break;
}
info.append(new String(bytes));
}
final String finalInfo = info.toString();
Log.i("Lin", "text = " + finalInfo);
runOnUiThread(new Runnable() {
@Override
public void run() {
mEtReceive.setText(mEtReceive.getText().toString() + socketAddress + " : " + finalInfo + "\n");
}