本文共 4407 字,大约阅读时间需要 14 分钟。
package com.example.test;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ClientApp { static Socket socket = null; private static boolean mRunning = false; public static void main(String[] args) { startClient(); } private static void startClient() { try { socket = new Socket("127.0.0.1", 8000); mRunning = true; new Thread(new InThread(socket)).start(); new Thread(new OutThread(socket)).start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } static class InThread implements Runnable { Socket socket = null; public InThread(Socket s) { socket = s; } @Override public void run() { while (mRunning) { if (socket.isClosed()) { mRunning = false; break; } InputStream in = null; try { in = socket.getInputStream(); } catch (IOException e1) { e1.printStackTrace(); } InputStreamReader reader = new InputStreamReader(in); try { char[] buf = new char[1024]; int cnt = reader.read(buf); if (cnt > 0) { String msg = new String(buf, 0, cnt); System.out.println(msg); } } catch (IOException e) { String error = e.getMessage(); if (!error.equalsIgnoreCase("Socket closed")) { e.printStackTrace(); } } } } } static class OutThread implements Runnable { Socket socket = null; public OutThread(Socket s) { socket = s; } @Override public void run() { while (mRunning) { if (socket.isClosed()) { mRunning = false; break; } OutputStream out = null; try { out = socket.getOutputStream(); } catch (IOException e2) { e2.printStackTrace(); } try { System.out.println("prepare to send data to server"); out.write("hello server\n".getBytes()); out.flush(); } catch (IOException e) { e.printStackTrace(); } try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}
AndroidManifest.xml中添加权限
package com.example.myapplication12;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class ServerThread extends Thread { private ServerSocket serverSocket; private Socket socket; public Socket getSocket() { return socket; } @Override public void run() { super.run(); try { //设置Android端口为9000 serverSocket = new ServerSocket(9000); Log.e("tip","*等待建立连接*"); // 等待建立连接 socket = serverSocket.accept(); Log.e("tip","*已经建立连接*"); startReader(socket); } catch (IOException e) { e.printStackTrace(); } } private void startReader(final Socket socket) { while(true){ String receiveMsg=""; // 读取数据 try { BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); if ((receiveMsg=bufferedReader.readLine())!=null){ System.out.println("获取到客户端的信息:" + receiveMsg); Log.e("msg from client",receiveMsg); OutputStream out=socket.getOutputStream(); receiveMsg+=" from server\n"; out.write(receiveMsg.getBytes()); out.flush(); Log.e("write back",receiveMsg); }else { Log.e("tip","no new msg"); } } catch (IOException e) { e.printStackTrace(); } } }}
然后只需要在 MainActivity 中开启线程就OK了!
转载地址:http://ybmc.baihongyu.com/