概述
package com.music.mysongs.activity
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Message
import androidx.annotation.RequiresApi
import kotlinx.android.synthetic.main.activity_lyric.*
import java.io.*
import java.net.Socket
class LyricActivity : Application, Runnable {
private val mTag = "LyricActivity"
//Comment model
private var mSocket: Socket? = null
private var mRead: BufferedReader? = null
private var mWrite: PrintWriter? = null
private val port: Int = 8080
private val host: String = "192.168.43.164"//"10.20.19.99"
private val sb = StringBuilder()
private val myHandler: Handler = Handler {
//socket model
txtShowComment_lyric.text = it.obj.toString()
editSendComment_lyric.setText("")
false
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_lyric)
//socket server
object : Thread() {
override fun run() {
try {
mSocket = Socket(host, port)
mRead = BufferedReader(InputStreamReader(mSocket?.getInputStream(), "UTF-8"))
mWrite = PrintWriter(
BufferedWriter(
OutputStreamWriter(
mSocket?.getOutputStream()
)
), true
)
} catch (e: IOException) {
e.printStackTrace()
}
}
}.start()
btnSendComment_lyric.setOnClickListener {
if (editSendComment_lyric.text != null && mSocket!!.isConnected && !mSocket!!.isOutputShutdown) {
val mSend = editSendComment_lyric.text.toString()
mWrite!!.println(mSend)
}
}
Thread(this@LyricActivity).start()
}
override fun run() {
try {
while (true) {
if (mSocket!!.isConnected && !mSocket!!.isInputShutdown) {
if (mRead?.readLine().also { sb.append(it + "n") } != null) {
val msg = Message()
msg.obj = sb
myHandler.sendMessage(msg)
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
1、改成服务器的IP地址和打开的端口号
2、定义读写数据流
3、保持socket连接线程的运行start()
4、监听发送按钮,然后用mWrite写到服务器去
5、客户端运行的时候用mRead读服务器传送过来的数据,然后放到handler里更新ui
6、布局部分
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activity.LyricActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/txtShowComment_lyric"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="start" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<EditText
android:id="@+id/editSendComment_lyric"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:inputType="text" />
<Button
android:id="@+id/btnSendComment_lyric"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end" />
</FrameLayout>
</LinearLayout>
</ScrollView>
7、服务器部分
参考这个的server代码
这部分都是通用的,只是ip地址换成自己电脑的,然后打开的端口号和客户端接入的要一致
8、运行
1.先连接上模拟器
2.运行app到模拟手机上
3.此时run处运行的只有一个app
4.然后运行server函数的main
5.此时ChatServer就开始运行了,并且打印了服务器的部分信息
6.app点击进入聊天室后客户端打印信息
7.点击发送按钮就可以接收了
最后
以上就是传统纸鹤为你收集整理的socket进行服务器和客户端通信的全部内容,希望文章能够帮你解决socket进行服务器和客户端通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复