android socket通信

时间:2019-02-16
本文章向大家介绍android socket通信,主要包括android socket通信使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

复习下,
server端:

package com.btzh;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author wyb
 * @date 2019/02/16
 */
public class Server {

	public static void main(String ards[]) {
		System.out.println("--------这是服务器!");
		// 接收数据
		getData();

	}

	private static void getData() {

		try {
			// 创建serverSocket监听端口8087
			ServerSocket serverSocket = new ServerSocket(8087);
			System.out.println("-------服务监听开始了");
			// 设置允许接受数据
			Socket scSocket = serverSocket.accept();
			// 接收客户端发送的数据
			InputStream inputStream = scSocket.getInputStream();
			InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8");
			BufferedReader bReader = new BufferedReader(streamReader);
			String sDateString = null;
			StringBuffer sBuffer = new StringBuffer();
			while ((sDateString = bReader.readLine()) != null) {
				sBuffer.append(sDateString);
			}
			System.out.println("---服务器:" + sBuffer.toString());
			scSocket.shutdownInput();
			// 向客户端发送数据
			OutputStream oStream = scSocket.getOutputStream();
			oStream.write(("我是服务器,客户端刚刚给我发送的数据就是:" + sBuffer.toString()).getBytes());
			oStream.flush();
			scSocket.shutdownOutput();
			oStream.close();

			bReader.close();
			streamReader.close();
			inputStream.close();

			scSocket.close();
			serverSocket.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

client端:

package com.btzh.client;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

    //输入数据
    private EditText inputedit;
    //展示服务器返回数据
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inputedit = findViewById(R.id.inputedit);
        textView = findViewById(R.id.textview);
    }
    //点击按钮向服务器发送数据
    public void sendMes(View view) {

        sendData();
    }

    private void sendData() {
        if (TextUtils.isEmpty(inputedit.getText().toString())) {
            Toast.makeText(this, "请输入内容!", Toast.LENGTH_SHORT).show();
            return;
        }

        new Thread() {
            @Override
            public void run() {
                super.run();

                try {
                    //本机地址+与服务器端的端口一致
                    Socket socket = new Socket("192.168.0.147", 8087);
                    OutputStream outputStream = socket.getOutputStream();
                    //发送数据
                    outputStream.write(inputedit.getText().toString().getBytes());
                    outputStream.flush();
                    socket.shutdownOutput();
                    InputStream inputStream = socket.getInputStream();
                    //接收读取服务器端的数据使用“GBK”防止乱码
                    InputStreamReader reader = new InputStreamReader(inputStream,"GBK");
                    BufferedReader bf = new BufferedReader(reader);
                    String s = null;
                    final StringBuffer stringBuffer = new StringBuffer();
                    while ((s = bf.readLine()) != null) {
                        stringBuffer.append(s);
                    }
                    
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(stringBuffer.toString());
                        }
                    });

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

    }


}

客户端使用时要注意连接相同局域网,开启网络权限,设置相同的端口,以及连接正确的ip地址;