河南专业网站建设公司/百度95099如何转人工
上一篇写的是服务端的使用,这一篇要写客户端
客户端可以实现一下功能:
1.链接服务端
2.向服务端发送信息,并得到服务端的反馈
客户端界面:
1.链接服务端
这是一个耗时操作,所以要把它放在一个子线程中
class ClientSocketThread extends Thread {@Overridepublic void run() {//如果是跑在同一个手机上就可以是随意的IP地址,如果是不同手机上的,上面要是同一WIFI下的IP地址try {Socket socket = new Socket("192.168.1.104", 1234);//ip地址要是对方的地址//连接成功后接收消息的方法(后面会讲到)connected(socket);} catch (IOException e) {e.printStackTrace();}}}
客户端Socket在实例化中,IP地址要填写所要链接服务端的IP地址,不是自己的
在运行的时候要先启动服务端再启动客户端
2.接收服务端发送的消息
因为要不断地接收消息,是一个耗时操作,所以要到子线程中,这里有一个匿名类,是进行消息处理的
首先是匿名类的构造方法
//写数据和读取数据的线程class ConnectThread extends Thread {Socket socket;InputStream in = null;OutputStream out = null;public ConnectThread(Socket socket) {this.socket = socket;try {in = socket.getInputStream();out = socket.getOutputStream();} catch (IOException e) {e.printStackTrace();}}
在run方法中实现对服务端数据的监听
@Overridepublic void run() {byte[] buffer = new byte[1024];int bytes = 0;//等待另一端发送的数据while (true) {try {bytes = in.read(buffer);Log.d("TAG", "client_read:" + new String(buffer, 0, bytes));Log.d("TAG", "----------------------------------");} catch (IOException e) {e.printStackTrace();}}}
向服务端发送数据,就是向服务端写入数据的方法
//向另一端写数据的操作public void write(byte[] buffer) {try {out.write(buffer);Log.d("TAG", "client_write:" + new String(buffer));} catch (IOException e) {e.printStackTrace();}}
关闭socket链接,这时输入输出流的链接都会关闭
//关闭的方法public void cancle() {try {socket.close();} catch (IOException e) {e.printStackTrace();}}
这个处理数据的类就算是完成了,下面是在connected()方法中将线程启动
//数据连接发送信息线程的实例化private void connected(Socket socket) {if (connectThread != null) {connectThread.cancle();connectThread = null;}connectThread = new ConnectThread(socket);connectThread.start();Log.d("TAG", "connect success");}
最最后一步是按钮的点击事件
@Overridepublic void onClick(View v) {switch (v.getId()) {//启动客户端case R.id.start_btn:new ClientSocketThread().start();break;//向服务端写数据case R.id.write_btn:String data = "hello_server";//数据传输类的对象connectThread.write(data.getBytes());break;}}
最后的最后就是源码
https://github.com/XuDaHaoRen/SocketClienDemo