三、端口详解
1.端口
端口表示一个程序的进程;
IP 是家属楼,端口是一户 1.不同的进程有不同的端口号,用来区分软件. 2.端口被规定为0~65535个 3.TCP,UDP: 每一个都有65535,也就是说一共有 65535*2个,单个协议下,端口号不能冲突。TCP与UDP是两个协议 4.端口分类: (1).公有端口:0~1023; HTTP :80 HTTPS :443 FTP(远程链接):21 Telent(远程监听) 23 (2).程序注册端口:1024~49151,分配用户或则程序 Tomcat : 8080 MySQL 3306 Oracle 1521 (3).动态、私有: 49152-65535
查看所有端口
| 端口流 netstat -ano //查看所有的端口 netstat -ano|findstr "6942" //查看指定的端口 tasklist|findstr "2460" //查看2460的端口的进程
基本思路: 1.InetSocketAddress 2.获取地址 inetSocketAddress_one.getAddress() 3.获取主机名 inetSocketAddress_one.getHostName() 4.获取端口号 inetSocketAddress_one.getPort()
import java.net.InetSocketAddress; public class Test_InetSocket { public static void main(String[] args) { InetSocketAddress inetSocketAddress_one = new InetSocketAddress("127.0.0.1", 8080); System.out.println(inetSocketAddress_one); InetSocketAddress inetSocketAddress_two = new InetSocketAddress("localhost", 8080); System.out.println(inetSocketAddress_two); //获得主机的地址 System.out.println(inetSocketAddress_one.getAddress()); //获得主机的名字(域名) System.out.println(inetSocketAddress_one.getHostName()); //获得主机的端口号 System.out.println(inetSocketAddress_one.getPort()); } }
四、通信协议
1.定义
网络通信协议:速率,传输码率,代码结构,传输控制.....
2.TCP/IP协议(一个集合)
TCP/IP包括: 重要协议: 1.TCP:用户传输协议 2.UDP:用户数据报协议 .... 出名的协议: 1.TCP: 用户传输协议 2.IP:网络互联协议
3.TCP与UDP的对比
TCP : (eg:打电话 对方可拒绝与不可拒绝) (1).链接稳定 (2).三次握手,四次挥手 请求连接 同意链接 链接 (3).客户端、服务端 (4).传输完成,释放链接,效率低 UDP : (eg:发短信 对方不能拒绝) (1).不连接.不稳定 (2).客户端、服务端 (没有明确的界限) (3).不管有没有准备好,都可以发给你.
三次握手:
1.判断两个事务是否连接上:(至少需要三次回应)
A.你瞅啥?
B:瞅你咋地?
A:打一架?
(…)链接成功
四次分手
1.判断两个事务是否断开连接:(需要四次操作)
A:我要走了
B:你真的要走了吗?
B:你真的真的要走了吗?
A我真的走了
(…)断开成功
(五)、TCP
1.TCP实现聊天的项目
Socket: 实现两台主机链接点的中间工具。(链接到指定IP,的端口号) 客户端通过申请链接服务端的端口,从而达到发送消息的模式. serveSocket: 服务端创建套接字端口与客户端链接(与指定端口)
服务端窗口: 4.获取客户端的端口 通过服务端 套接字 ServerSocket serverSocket = new ServerSocket(9999); 5.等待客户端链接 Socket socket=serverSocket.accept(); 6.读取客户端发送的信息 InputStream is=socket.getInputStream(); 7.打印输出 (1).管道流的方法 (2).教学用法
package com.Kuangstudy.Net; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; //服务端 public class TcpClientDem0 { public static void main(String[] args) throws Exception{ //1.我得有一份地址 ServerSocket serverSocket = new ServerSocket(9999); //4.等待客户端链接过来 Socket socket=serverSocket.accept(); //5.读取客户端的信息 InputStream is=socket.getInputStream(); /* //6.设置读取得缓冲区 byte []buf=new byte[1024]; //7.设置判断得操作 int count=0; //8.开始进行读取 while ((count=is.read(buf))!=-1){ System.out.println(new String(buf,0,count)); }*/ //管道流实现读取文件信息 ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream(); //6.设置缓冲区 byte []buf=new byte[1024]; int count=0; while ((count=is.read(buf))!=-1){ byteArrayOutputStream.write(buf,0,count); } System.out.println(byteArrayOutputStream.toString()); //先开得后关闭 byteArrayOutputStream.close(); is.close(); } }
客户端窗口: 1.初始化一个IP和端口号 2.创建一个套接字的链接,把IP和端口连接起来 Socket socket = new Socket(inetAddress,port); 3.利用IO流的输出流进行发送信息 OutputStream os=socket.getOutputStream();
package com.Kuangstudy.Net; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; //客户端 public class TcpClientDem1 { public static void main(String[] args) throws Exception { //1.要知道服务器的地址,和端口号 InetAddress inetAddress = InetAddress.getByName("127.0.0.1"); int port=9999; //2.创建一个Socket链接 Socket socket = new Socket(inetAddress,port); //3.发送消息 IO流 OutputStream os=socket.getOutputStream(); os.write("你好呀,我是李明".getBytes()); os.close(); } }
管道流的示意图