一个简单的TCP服务器
2016-11-24 10:28
323 查看
package com.haitaichina.tcpdemo; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; /** * 一个简单的TCP连接 * 由于控件只有简单的一个Button和TextView * 代码就不进行粘贴了 */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button bt_start; private TextView tv_show; private Button bt_send; private ServerSocket serverSocket; private Socket clicksSocket; private InputStream inputStream; private OutputStream outputStream; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidget(); } private void initWidget() { bt_start = (Button) findViewById(R.id.bt_start); tv_show = (TextView) findViewById(R.id.tv_show); bt_start.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_start: //启动服务器的监听线程 ServerSocket_thread serverSocket_thread = new ServerSocket_thread(); serverSocket_thread.start(); break; } } /** * 服务器监听线程 */ class ServerSocket_thread extends Thread { @Override public void run() { //while无限循环监听客户端发送的消息 while (true) { try { //监听port全部端口 serverSocket = new ServerSocket(); serverSocket.setReuseAddress(true); //绑定本机端口号 serverSocket.bind(new InetSocketAddress(8888)); //监听连接,如果无连接就会处于阻塞状态,一直等待 clicksSocket = serverSocket.accept(); inputStream = clicksSocket.getInputStream(); //启动接收消息线程 Receive_Thread receive_thread = new Receive_Thread(); receive_thread.start(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 接收/发送 * 消息线程 */ class Receive_Thread extends Thread { @Override public void run() { while (true) { try { final byte[] buf = new byte[1024]; final int len = inputStream.read(buf); //获得客户端发来的消息
if(len!=-1){ String strData = new String(buf, 0, len); tv_show.setText("接收客户端发送的数据:" + strData); try { //获取输出流 outputStream = clicksSocket.getOutputStream(); outputStream.write("发给客户端的消息".getBytes()); } catch (IOException e) { e.printStackTrace(); }
}else{
tv_show.setText("设备主动断开");
} } catch (IOException e) { e.printStackTrace(); } } } } /** * 当按下返回键时关闭输入输出流以及socket * 断开TCP连接 * * @param keyCode * @param event * @return */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果socket不为空 if (clicksSocket != null) { try { outputStream.close(); inputStream.close(); clicksSocket.close(); } catch (IOException e) { e.printStackTrace(); } } return super.onKeyDown(keyCode, event); } }
相关文章推荐
- 用Python实现一个简单的多线程TCP服务器的教程
- 一个简单的可以接收TCP服务器数据的TCP客户端
- 一个简单的可以接收TCP客户端数据的TCP服务器
- Java tcp服务器框架 以及一个简单命令行聊天的测试例子
- nodejs中一个简单的TCP服务器端和客户端的聊天服务器
- 来一个最简单的TCP服务器
- Node.js 写一个简单的服务器和TCP服务器,以及sumblimeText3简单使用
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 为初学者写的Winsock编程--一个简单的TCP服务器
- TCP/TP编程 - 一个简单的Linux下C写的socket服务器客户端程序
- 用Python实现一个简单的多线程TCP服务器的教程
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 使用libevent和boost编写一个简单的tcp服务器
- 一个简单的TCP服务器与客户端示例
- golang简单实现一个基于TLS/SSL的 TCP服务器和客户端
- Linux Socket 事件触发模型 epoll 示例 这里会写一个用C语言的TCP服务器的完全实现的简单程序
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 一个简单的TCP服务器
- 用Reactor框架实现一个简单的tcp服务器
- 用Java socket (TCP通信模型)实现一个简单的web 服务器