scoket客户端扫描电脑可用端口小demo

来源:互联网 发布:什么是编程语言 编辑:程序博客网 时间:2024/05/19 17:50
客户端Socket
1、网络由下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
2、TCP/IP协议是网络传输层协议,主要解决数据如何在网络中传输。Http是应用层协议,主要解决如何包装数据
3、实际上Socket是对TCP/IP协议的封装,它是一个调用接口(API)
4、利用Socket扫描服务器可用端口
5、发送和接收数据
1.Socket.getInputStream
2.Socket.getOutputStream

2、模拟Http的请求

下面是代码:

import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;public class MainActivity extends AppCompatActivity {    private Button btn;    private TextView tv;    //使用异步线程更新UI    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            //该方法追加内容的方法,类似于StringBuffer里面的append();            tv.append(String.valueOf(msg.what)+"OK\n");        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        btn = (Button) findViewById(R.id.start);        tv = (TextView) findViewById(R.id.showIP_tv);        btn.setOnClickListener(new ButtonClikListener());    }    private class ButtonClikListener implements View.OnClickListener {        @Override        public void onClick(View view) {            switch (view.getId()){                case R.id.start:                    scanPorts();                    break;                default:                    break;            }        }    }    private void scanPorts(){        //启动线程        new ScanPorts(5000,0).start();    }    class ScanPorts extends Thread{        private int minPort;//最小端口号        private int maxPort;//最大端口号        public ScanPorts(int maxPort,int minPort){            this.maxPort = maxPort;            this.minPort = minPort;        }        @Override        public void run() {            for (int i = minPort; i < maxPort; i++){                //创建客户端                Socket socket = new Socket();                //设置扫描IP和端口号                //InetSocketAddress是SocKetAddress的子类                SocketAddress socketAddress = new InetSocketAddress("10.114.15.238",i);                try {                    //建立连接的方法                    //第一个参数代表连接的地址,第二个参数代表延迟50ms                    socket.connect(socketAddress,50);                    //连接成功之后给handler发送消息,通知塔更新TextView                    handler.sendEmptyMessage(i);                    //连接成功后关闭socket                    socket.close();                } catch (Exception e) {                    e.printStackTrace();                }            }        }    }}
前端就一个Button和一个TextView就不发了

注意在清单文件里加上

<uses-permission android:name="android.permission.INTERNET"/>

0 0