在网络成层中TCP对应于四层java
链路层(物理通道)
一般是对网络链接设备的驱动协议,例如对光纤和都对网线的驱动不同网络层(核心层)
TCP/IP协议的核心,他用于将数据分组发送
传输层(主要是程序间通讯)
包括TCP,UDP应用层
主要是负责应用程序的协议。如HTTP,FTP 用来区分计算机的惟一标识(IP地址)编程
采用八个二进制位表示一个段(因此最大只有255),用四个字节标识一个电脑数组
192.168.105.222安全
==192.168==:是局域的IP地址,之内的电脑都是联通的服务器
==本机地址== :127.0.0.1,表示本身的地址网络
==ping操做==:ping也属于一个通讯协议,是TCP/IP协议的一部分,用于检查网络通路是否可用socket
计算机之间的数据通信操作系统
端口:通信是为了不不一样程序之间的数据发错,致使丢失等等,操做系统实现的逻辑编号
,每一个应用程序都有被分配的端口号。.net
UDP是无链接通讯协议,既在传输数据时。数据的发送端和接受端不创建逻辑链接,不确认接受端是否存在,也不会接受反馈。code
java.net
中的类都与互联网有关系
public static InetAddress getLocalHost() //localhost本地主机,会抛出异常 //主机名和IP地址 public String getHostName() public String getHostAddress() public static InetAddress getByName(String name) //传输别人的主机名,拿到对方的IP地址
DategramPacket是UDP对传输数据对象的封装,接受端的IP,端口号的封装
DatagramSocket是对封装好的数据包的传输对象,是绑定IP和端口号的套接字
//客户端 //建立DatagramPacket对象 //DatagramPacket(byte[] buf,int length,InetAddress address,int port); byte[] data = "你好UDP".getBytes(); InetAddress inet = InetAddress.getByName("192.168.1.101"); //封装数据对象 DategramPacket datagramPacket = new DatagramPacket(data,date.length,inet,1000) //建立Socket对象 DatagramSocket datagramSocket = new datagramSocket(); //发送数据包 datagramSocket.send(datagramSocket); //关闭资源 datagramSocket.close()
//服务端 //建立DatagramSocket对象,必须绑定端口号DatagramSocket(int port); DatagramSocket datagramSocket = new DatagramSocket(1000); //建立一个字节数组用来接收数据 byte[] data = new byte[1024]; //建立一个DatagramPacket数据包对象 DatagramPacket dp = new DatagramPacket(data,data.length) //调用DatagramSocket对象的receive(DatagramPacekt dp)接收数据 datagramSocket.receive(dp); //拆包 /* 须要知道发送者的IP DatagramPacket中的public InetAddress getAddress() 须要发送端的端口号 DatagramPacket中的public int getPort() 知道数据的字节个数,避免资源浪费 DatagramPacket中的public int getLength() */ int length = dp.getLength(); int port = dp.getPort(); String address = dp.getAddress().getHostAddress(); //关闭资源 datagramSocket.close()
将发送端的getDatagraPacket的传输数据转换到键盘输入,在接收端DatagramSocket不关闭资源就能够了。
String sc = new Scanner(System.in); DatagramSocket ds = new DatagramSocket(); InetAddress inet = InetAddress.getByName(192.168.1.101); while(true){ String message = sc.nextLine(); byte[] bytes = message.getBytes(); DatagramPacket dp = new DatagramPacekt(bytes,bytes.length,inet,1000); }
byte[] data = new byte[1024]; DatagramSocket ds = new DatagramSocket(1000) while(true){ DatagramPacket dp = new DatagramPacket(date,data.length); ds.receive(dp); int port = dp.getPort(); String address = dp.getAddress().getHostAddress(); int length = dp.getLength(); }
TCP协议是面向链接呃通讯协议。必须创建发送与接收端的逻辑链接。
客户端想服务端发出链接请求
服务端向客户端发送一个响应
客服端想服务端发送确认信息
刻意确保传输数据的安全性
==TCP与UDP的区分:==UDP只区分发送和接受,可是TCP严格区分客服端和服务器,服务器不会主动链接客户端。在链接通路完成后悔自动创建一个字节流对象(OutputStream,InputStream)
//传入服务器的IP和端口号,一运行就会去链接 public Socket(String host,int port); //一但链接就会建立对应的输入输出流 public OutputStream getOutputStream(); public InputStream getInputStream();
Socket socket = new Socket(127.0.0.1,1000); OutputStream out = socket.getOutputStream(); out.write(""); //网络上的流对象能够不用关闭流对象
//服务器为了区分究竟是那个客户端链接了,须要拿到客户端的套接字 public ServiceSocket(int port); public Socket accept(); //这个套接字对象是经过IO传过来的 public InputStream getInpurStream(); //向客户端回写数据的方法 public OutputStream getOutputStream();
ServerceSocket server = new ServerSocket(1000); Socket socket = server.accept(); InputStream in = socket.getInpuStream(); byte[] data = new byte[1024]; int len = in.read(data); System.out.println(new String(data,0,len)); OutputStream out = socket.getOutputStream(); server.write(xxxx); socket.close(); server.close();