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

客户端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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值