韩顺平qq项目 java网络编程_java基础专栏—java网络编程

java网络编程

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

链路层(物理通道)通常是对网络连接设备的驱动协议,例如对光纤和都对网线的驱动不一样

网络层(核心层)TCP/IP协议的核心,他用于将数据分组发送

传输层(主要是程序间通信) 包括TCP,UDP

应用层主要是负责应用程序的协议。如HTTP,FTP

IP地址和端口号

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

手动写的

分配的

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

192.168.105.222

==192.168==:是局域的IP地址,以内的电脑都是联通的

==本机地址== :127.0.0.1,表示自己的地址

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

计算机之间的数据通讯

端口:通讯是为了避免不同程序之间的数据发错,导致丢失等等,操作系统实现的逻辑编号,每个应用程序都有被分配的端口号。

UDP协议

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

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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值