客户端:
MainActivity.java
import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MainActivity extends AppCompatActivity { private EditText mEditText; private TextView mTextView; private static final String TAG = "TAG"; private static final String HOST = "172.20.15.169"; private static final int PORT = 10010; private Socket socket; private PrintWriter printWriter; private BufferedReader bufferedReader; private String receiveString = ""; private StringBuffer stringBuffer; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); mTextView.setText( stringBuffer.append(receiveString+"\n")); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText) findViewById(R.id.editText); mTextView = (TextView) findViewById(R.id.textView); } /** * 发送消息 * * @param view */ public void send(View view) { new Thread(new SendRun()).start(); } /** * 断开连接 * * @param view */ public void disconnect(View view) { new Thread(new disconnectRun()).start(); } /** * 建立连接 * * @param view */ public void connect(View view) { new Thread(new ConnectRun()).start(); } //发送消息 class disconnectRun implements Runnable{ @Override public void run() { printWriter.println("5201314"); } } //发送消息 class SendRun implements Runnable{ @Override public void run() { printWriter.println(mEditText.getText().toString()); } } //建立连接 class ConnectRun implements Runnable { @Override public void run() { try { socket = new Socket(HOST, PORT); printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); receviceMsg(); } catch (Exception e) { Log.e("111", e.toString()); e.printStackTrace(); } } } //循环接受数据 public void receviceMsg() { stringBuffer = new StringBuffer(); while (true) { try { if ((receiveString = bufferedReader.readLine()) != null) { handler.sendEmptyMessage(1); } } catch (Exception e) { e.printStackTrace(); } } } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="connect" android:text="建立连接" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="send" android:text="发送消息" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="disconnect" android:text="断开连接" /> </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="match_parent" android:text="" /> </ScrollView> </LinearLayout>
添加相关权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
服务端
ServerImp.java
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; public class ServerImp implements Runnable { private Socket socket; private PrintWriter printWriter; private BufferedReader bufferedReader; private String receiverMsg = ""; public ServerImp(Socket socket) { // TODO Auto-generated constructor stub this.socket = socket; System.out.println("建立连接"); try { printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")), true); bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); printWriter.println("建立连接成功"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub while (true) { try { if ((receiverMsg = bufferedReader.readLine()) != null) { if(receiverMsg.equals("5201314")) { System.out.println("客户单请求断开连接.成功"); printWriter.println("断开连接成功"); printWriter.close(); bufferedReader.close(); break; }else { System.out.println("客户端:"+receiverMsg); printWriter.println("服务器:收到了你的消息--"+receiverMsg); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
ServerTest.java
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ServerTest { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(10010); while(true) { Socket socket = serverSocket.accept();//阻塞 new Thread(new ServerImp(socket)).start(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }