java基础专栏—java网络编程

java网络编程

​ 在网络成层中TCP对应于四层java

  • 链路层(物理通道)一般是对网络链接设备的驱动协议,例如对光纤和都对网线的驱动不同
  • 网络层(核心层)TCP/IP协议的核心,他用于将数据分组发送
  • 传输层(主要是程序间通讯) 包括TCP,UDP
  • 应用层主要是负责应用程序的协议。如HTTP,FTP

IP地址和端口号

​ 用来区分计算机的惟一标识(IP地址)编程

  • 手动写的
  • 分配的

采用八个二进制位表示一个段(因此最大只有255),用四个字节标识一个电脑数组

192.168.105.222安全

==192.168==:是局域的IP地址,之内的电脑都是联通的服务器

==本机地址== :127.0.0.1,表示本身的地址网络

==ping操做==:ping也属于一个通讯协议,是TCP/IP协议的一部分,用于检查网络通路是否可用socket

计算机之间的数据通信操作系统

端口:通信是为了不不一样程序之间的数据发错,致使丢失等等,操做系统实现的逻辑编号,每一个应用程序都有被分配的端口号。.net

UDP协议

​ UDP是无链接通讯协议,既在传输数据时。数据的发送端和接受端不创建逻辑链接,不确认接受端是否存在,也不会接受反馈。code

  • UDP协议消耗资源小,通讯效率高,通常用于音频,视频和普通护具的传输
  • 使用UDP不能确保数据的完整,可能会丢失
  • 数据大小被限制在64K内

InetAddress

java.net中的类都与互联网有关系

public static InetAddress getLocalHost()
//localhost本地主机,会抛出异常
//主机名和IP地址
  
public String getHostName()
  
public String getHostAddress()
  
public static InetAddress getByName(String name)
//传输别人的主机名,拿到对方的IP地址

DatagramPacket and DatagramSocket

​ 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协议是面向链接呃通讯协议。必须创建发送与接收端的逻辑链接。

  • 客户端想服务端发出链接请求

  • 服务端向客户端发送一个响应

  • 客服端想服务端发送确认信息

  • 刻意确保传输数据的安全性

    ​==TCP与UDP的区分:==UDP只区分发送和接受,可是TCP严格区分客服端和服务器,服务器不会主动链接客户端。在链接通路完成后悔自动创建一个字节流对象(OutputStream,InputStream)

Socket

//传入服务器的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("");
//网络上的流对象能够不用关闭流对象

ServerSocet

//服务器为了区分究竟是那个客户端链接了,须要拿到客户端的套接字
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();
相关文章
相关标签/搜索