客户端Socket
1、网络由下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
2、TCP/IP协议是网络传输层协议,主要解决数据如何在网络中传输。Http是应用层协议,主要解决如何包装数据
3、实际上Socket是对TCP/IP协议的封装,它是一个调用接口(API)
4、利用Socket扫描服务器可用端口
5、发送和接收数据
1.Socket.getInputStream
2.Socket.getOutputStream
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"/>