在与车机硬件通过socket与NCM网卡驱动联调(IP及端口已固定)
1.服务端创建及接收发送消息(ByteArray)
1.创建ServerSocket
serverSocket = ServerSocket(
SERVER_SOCKET_PORT,
50,
InetAddress.getByName(SERVER_CLIENT_SOCKET_IP)
)
SERVER_SOCKET_PORT为端口号,SERVER_CLIENT_SOCKET_IP客户端的IP
2.等待客户端连接
clientSocket = serverSocket!!.accept()
clientSocket?.keepAlive = true
if (clientSocket?.isConnected == true) {
serverCallback?.connectClientStatus(true)
receiveMsgFromClient(serverCallback)
} else {
serverCallback?.connectClientStatus(false)
}
3.接收消息
private fun receiveMsgFromClient(serverCallback: ServerCallback?) {
val inputStream = clientSocket!!.getInputStream()
val buffer = ByteArray(1024)
buffer.fill(0)
while (true) {
val bytesRead = inputStream.read(buffer)
if (bytesRead == -1) break
val receivedData = buffer.copyOfRange(0, bytesRead)
serverCallback?.receiveMsgFromClient(receivedData)
}
}
4.发送消息
try {
if (clientSocket?.isClosed == true) {
LogUtils.i("MeterSocketBuild", "sendMsgToClient fail socket closed")
return
}
val outputStream = clientSocket!!.getOutputStream()
outputStream.write(bytes, 0, bytes.size)
outputStream.flush()
} catch (e: IOException) {
e.printStackTrace()
}
2.客户端创建及接收发送消息
1.创建socket
socketClient = Socket().apply {
bind(InetSocketAddress(CLIENT_SOCKET_LOCAL_IP, 0))
connect(InetSocketAddress(CLIENT_SOCKET_IP, CLIENT_SOCKET_PORT))
keepAlive = true
}
if (socketClient?.isConnected == true) {
clientCallback?.connectServerStatus(true)
receiveMsgFromServer(clientCallback)
} else {
clientCallback?.connectServerStatus(false)
}
2.接收消息
private fun receiveMsgFromServer(clientCallback: ClientCallback?) {
val inputStream = socketClient!!.getInputStream()
val buffer = ByteArray(1024)
buffer.fill(0)
while (true) {
val bytesRead = inputStream.read(buffer)
if (bytesRead == -1) break
val receivedData = buffer.copyOfRange(0, bytesRead)
clientCallback?.receiveMsgFromServer(receivedData)
}
}
3.发送消息
try {
if (socketClient?.isClosed == true) {
LogUtils.i("MeterSocketBuild", "sendMsgToServer fail client closed")
return@submitTask
}
val outputStream = socketClient!!.getOutputStream()
outputStream.write(bytes)
outputStream.flush()
} catch (e: Exception) {
e.printStackTrace()
}
以上全部使用线程池来处理。
private fun createThreadPoolExecutor(): ThreadPoolExecutor {
return ThreadPoolExecutor(
10, 15,
15L, TimeUnit.SECONDS,
SynchronousQueue()
)
}
238

被折叠的 条评论
为什么被折叠?



