android tcp简书,Android Socket编程(tcp)初探

客户端图片

这里封装到了线程中,如果需要修改,那么自行修改,小可这里只是抛砖引玉,废话不说先上图

2ee8d427d011?tdsourcetag=s_pcqq_aiomsg

tcp客户端.png

客户端代码(线程中)

代码中的注释比较详细,我这里就不逐一解释了

public class TcpClientThread extends Thread {

//IP地址

private String address;

//端口

private int port;

//发送内容

private String msg;

private Handler mHandler;

public TcpClientThread(Handler handler, String address, int port, String msg) {

this.mHandler = handler;

this.address = address;

this.port = port;

this.msg = msg;

}

@Override

public void run() {

super.run();

sendSocket();

}

/**

* 设置

*/

private void sendSocket() {

InputStreamReader reader = null;

BufferedReader bufReader = null;

Socket socket = null;

try {

//1.创建监听指定服务器地址以及指定服务器监听的端口号

//IP地址,端口号

socket = new Socket(address, port);

// 2.拿到客户端的socket对象的输出流发送给服务器数据

OutputStream os = socket.getOutputStream();

//写入要发送给服务器的数据

os.write(msg.getBytes());

os.flush();

socket.shutdownOutput();

//拿到socket的输入流,这里存储的是服务器返回的数据

InputStream is = socket.getInputStream();

//解析服务器返回的数据

reader = new InputStreamReader(is);

bufReader = new BufferedReader(reader);

String s = null;

final StringBuffer sb = new StringBuffer();

while ((s = bufReader.readLine()) != null) {

sb.append(s);

}

sendMsg(0, sb.toString());

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally { //3、关闭IO资源

try {

if (bufReader != null)

bufReader.close();

} catch (IOException ex) {

ex.printStackTrace();

}

try {

if (socket != null)

socket.close();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

/**

* 发送消息

*/

private void sendMsg(int what, Object object) {

Message msg = new Message();

msg.what = what;

msg.obj = object;

mHandler.sendMessage(msg);

}

}

客户端(Activity中使用)

public class TcpClientActivity extends AppCompatActivity

implements View.OnClickListener {

EditText mEdtContent;

TextView mTxtContent;

Button mBtnSend;

String address = "192.168.0.197";

int port = 12345;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_tcpclient);

initView();

}

private void initView() {

mEdtContent = findViewById(R.id.edt_content);

mBtnSend = findViewById(R.id.btn_send);

mTxtContent = findViewById(R.id.txt_content);

mBtnSend.setOnClickListener(this);

}

@Override

public void onClick(View view) {

switch (view.getId()) {

case R.id.btn_send: {//发送

TcpClientThread mThread = new TcpClientThread(mHandler, address, port,

mEdtContent.getText().toString());

mThread.start();

break;

}

}

}

/**

* Handler

*/

private Handler mHandler = new Handler(Looper.myLooper()) {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case 0: {

String content= (String) msg.obj;

mTxtContent.setText(content);

break;

}

}

}

};

}

服务端(图片)

2ee8d427d011?tdsourcetag=s_pcqq_aiomsg

tcp服务端.png

服务端(代码-->线程中)

public class TcpServerThread extends Thread {

private Socket socket;

/**

* 初始化

*

* @param socket

*/

public TcpServerThread(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

super.run();

InputStreamReader reader = null;

BufferedReader bufReader = null;

OutputStream os = null;

try {

reader = new InputStreamReader(socket.getInputStream());

bufReader = new BufferedReader(reader);

String s = null;

StringBuffer sb = new StringBuffer();

while ((s = bufReader.readLine()) != null) {

sb.append(s);

}

System.out.println("服务器:" + sb.toString());

// 关闭输入流

socket.shutdownInput();

// 返回给客户端数据

os = socket.getOutputStream();

os.write(("我是服务端,客户端发给我的数据就是:" + sb.toString()).getBytes());

os.flush();

socket.shutdownOutput();

} catch (IOException e2) {

e2.printStackTrace();

} finally {// 关闭IO资源

if (reader != null) {

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (bufReader != null) {

try {

bufReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (os != null) {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

服务端(调用)

public class TcpServer {

/**

* @param args

*/

public static void main(String[] args) {

try {

@SuppressWarnings("resource")

ServerSocket serverSocket = new ServerSocket(12345);

while (true) {

System.out.println("Server开始~~~监听~~~");

// accept方法会阻塞,直到有客户端与之建立连接

Socket socket = serverSocket.accept();

TcpServerThread serverThread = new TcpServerThread(socket);

serverThread.start();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

说明

这里用了一个while循环,然后就可以无限接收客户端发送的数据,如果把while中的条件改成你需要的,就会实现你所需要的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值