JVAV——网络编程UDP/TCP

在这里插入图片描述

一:
计算机网络可以实现多台计算机的连接但不同的计算机操作系统和硬件体系结构不同,为了提供通信支持位于同一网络中的计算机必须要遵循一定的规则。目前应用最广泛的是TCP/IP,UDP,ICMP等协议。

IP地址和端口号

要想使网络中的计算机能够通信,必须为每台计算机指定一个标识号,通过这个标识号指定接收数据的计算机或者发送数据的计算机。
通过IP地址可以连接到指定的计算机,但想要访问到目标计算机的程序还需要指定的端口号,不同的程序通过不同的端口号来区分。

InetAddress

在Java中,提供了一个与IP地址相关的类,该类用于封装一个IP地址,并提供一系列与IP地址相关的方法。

InetAddress getByName(String host)参数host表示指定的主机,该方法用于给定主机名确定主机IP地址
InetAddress getLocalHost()创建一个表示本地主机的对象
String getHostName()得到IP地址的主机名
Boolean isReachable()判断指定时间内地址是否可以到达
String getHostAddress()得到字符串格式的原始IP地址
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Example01 {
     public static void main(String[] args) throws Exception{
    	 InetAddress localAddress = InetAddress.getLocalHost();
    	 System.out.print("本机的IP地址是:"+localAddress.getHostAddress());
     }
}

UDP与TCP

1.UDP通信
UDP是一种面向无连接的协议
JAVA提供了一个DatagramPacket类(接收端)与DatagramSocket类(发送端)

DatagramPacket类的构造方法:
(1)DatagramPacket(byte[]buf,int length)
这样的对象只能用于接收端,不能用于发送端。
(2)DatagramPacket(byte[]buf,int length,InetAddress addr,int port)
指定了封装数据的字节数组的大小与数据的大小而且指定了数据包的目标IP 与端口号通常用于发送端。
InetAddress getAdress()
该方法用于返回发送端或接收端的IP地址。
int getPort()
该方法用于返回发送端或接收端的端口号。
byte[]getData()
返回将要接受或将要发送的数据。
int getLengt()
返回将要接受或将要发送数据的长度。

DatagramSocket类的构造方法
(1)DatagramSocket()
用于创建发送端的DatagramSocket对象,因为并没有指定端口号,因此系统会分配一个没有被其他网络程序使用的端口号。
(2)DatagramSocket(int port)
在创建发送端的DatagramSocket对象时,指定端口号可以监听指定的端口。
(3)DatagramSocket(int port,InetAdress addr)
不仅指定了端口号还指定了相关的IP地址。
void receive(DatagramPacket p)
该方法用于将接收到的数据填充到DatagramPacket数据包中。
void send(DatagramPacket p)
该方法用于发送DatagramPacket数据包发送的数据包中包含将要发送的数据数据长度,远程主机的IP地址与端口号。
void close()
关闭当前的Socket,释放资源。

UDP实现代码

import java.net.*;//接收端
public class Receiver {
	public static void main(String[] args) throws Exception{
		byte[] buf = new byte[1024];
	DatagramSocket ds = new DatagramSocket(8954);
	DatagramPacket dp = new DatagramPacket(buf,buf.length);
	System.out.println("等待接收数据");
	ds.receive(dp);
	String str = new String (dp.getData(),0,dp.getLength())+
	"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
	System.out.print(str);
	ds.close();
	}
}
import java.net.*;//发送端
public class Sender {
	public static void main(String[] args) throws Exception{
		DatagramSocket ds = new DatagramSocket(3000);
		String str = "Hello world";
		byte[] arr = str.getBytes();
        DatagramPacket dp = new DatagramPacket(arr,arr.length,InetAddress.getByName("localhost")
,8954);
         System.out.println("发送消息");
         ds.send(dp);
         ds.close();
	}
}

TCP通信

java提供了两个类
1.ServerSocket类
2.Socket类

ServerSocket类的构造方法
ServerSocket()
创建的ServerSocket对象不与任何端口绑定不能直接使用需要调用bind(SocketAddress endpoint)方法将其绑定到指定的端口上。
ServerSocket(int port)
将其绑定到指定的端口上.
ServerSocket(int port,int backlog)
增加backlog参数在服务器忙时可以与之保持请求连接请求的等待客户数量。若没有此参数默认值为50.

ServerSocket常用方法
Socket accept()
该方法用于等待客户端的连接。
InetAddress getInetAddress()
该方法用于返回一个InetAddress对象。
boolean is Closed()
用于判断ServerSocket对象是否关闭,关闭返回True否则为false
void bind(SocketAddress endpoint)
将ServerSocket对象绑定到指定的IP地址与端口号,其中参数endpoint封装了IP地址与端口号。
Socket类的构造方法
Socket()
该构造方法并没有指定的端口号与IP地址,需要调用connect(SocketAddress endpiont)方法才能完成与指定服务器相连。其中参数endpoint封装了IP地址与端口号。
Socket(String host, int port)
根据参数去链接在指定地址和端口上运营的服务器程序,参数host接受的是一个字符串类型的IP地址。
Socket(InetAddress address,int port)
address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。
Socket常用方法
int getPort()
返回int类型的端口号
InetAddress getInetAddress()
该方法用于返回一个InetAddress对象。
void close()
关闭Socket连接与资源。
InputStream getInputStream()
返回输入流对象。如果该对象是服务器端的Socket对象返回,就用于读取客户端发送的数据,反之用于读取客户端发送的数据。
OutputStream getOutputStream()
返回输出流对象。如果该对象是服务器端的Socket对象返回,就用于向客户端发送的数据,反之向服务器发送的数据。

getInputStream()与getOutputStream()方法分别用于获取输入流和输出流。当建立联系后数据是以I/O流的形式进行交互的。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值