本文共 6555 字,大约阅读时间需要 21 分钟。
首先客户端设置几个按钮:分别是连接服务器,发送消息,接收消息,关闭连接
新建两个Moudle:分别是客户端和服务器
在客户端和服务器的manifests中添加权限:
客户端中的java程序:
package com.newer.client;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.appindexing.Thing;import com.google.android.gms.common.api.GoogleApiClient;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;public class MainActivity extends AppCompatActivity { Socket csocket;//客户端的socket OutputStream os;//socket流 BufferedWriter bw; PrintWriter pw; BufferedReader br; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } //创建客户端并连接 public void startClient(View view) { //创建客户端必须放到线程中做,开始线程 new Thread(new Runnable() { @Override public void run() { try { if(csocket ==null) csocket = new Socket("127.0.0.1", 54321); } catch (IOException e) { e.printStackTrace(); } } }).start(); } public void sendMsg(View view) { new Thread(new Runnable() { @Override public void run() { try { os = csocket.getOutputStream(); bw = new BufferedWriter(new OutputStreamWriter(os)); pw = new PrintWriter(bw,true); pw.println("hello server"); } catch (IOException e) { e.printStackTrace(); } } }).start(); } public void recMsg(View view) { new Thread(new Runnable() { @Override public void run() { while(true){ try { br = new BufferedReader(new InputStreamReader(csocket.getInputStream())); String res = br.readLine(); if(res != null) Log.d("TAG","server say:"+res); } catch (IOException e) { e.printStackTrace(); } } } }).start(); } public void closeClient(View view) { //关闭 socket if(csocket.isBound()) { try { csocket.close(); csocket = null; } catch (IOException e) { e.printStackTrace(); } } } /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ public Action getIndexApiAction() { Thing object = new Thing.Builder() .setName("Main Page") // TODO: Define a title for the content shown. // TODO: Make sure this auto-generated URL is correct. .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]")) .build(); return new Action.Builder(Action.TYPE_VIEW) .setObject(object) .setActionStatus(Action.STATUS_TYPE_COMPLETED) .build(); } @Override public void onStart() { super.onStart(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client.connect(); AppIndex.AppIndexApi.start(client, getIndexApiAction()); } @Override public void onStop() { super.onStop(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. AppIndex.AppIndexApi.end(client, getIndexApiAction()); client.disconnect(); }} 服务器的java程序:
package com.newer.server;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class MainActivity extends AppCompatActivity { ServerSocket sSocket; Socket cSocket; BufferedReader br; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initServer(); } private void initServer() { new Thread(new Runnable() { @Override public void run() { try { sSocket = new ServerSocket(54321); Log.d("TAG","服务端开启,等待客户端连接"); cSocket = sSocket.accept(); Log.d("TAG","客户端连接成功:"+cSocket.getInetAddress()); mHanler.sendEmptyMessage(2); } catch (IOException e) { e.printStackTrace(); } } }).start(); } Handler mHanler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if(msg.what==2){ recMsg(); } return false; } }); private void recMsg(){ new Thread(new Runnable() { @Override public void run() { try { br = new BufferedReader(new InputStreamReader( cSocket.getInputStream())); String res = br.readLine(); if(res!= null) Log.d("TAG","client say:"+res); } catch (IOException e) { e.printStackTrace(); } } }).start(); }} 先运行服务器程序,显示服务器等待客户端连接。
转载地址:http://rylab.baihongyu.com/