【JavaSE】网络编程---UDP丶TCP

一.UDP

UDP:面向无连接通信(发送端不需接收端确认是否能接收),数据不安全,效率高

1.常用方法
InetAddress
  • static InetAddress getLocalHost() 获取本地主机
  • static InetAddress getByName(String host) 根据域名或IP获取主机
  • String getHostName() 获取主机名
  • String getHostAddress() 获取IP地址
DatagramPacket
  • DatagramPacket(byte[] buf, int length) 构造缓冲区接收读取指定长度的数据包
  • int getLength() 获取接收的数据包的大小
  • InetAddress getAddress() 获取发送方的IP地址
  • int getPort() 获取发送方的端口号
  • DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造发送的数据包,并设置接受者的IP地址和端口
DatagramSocket
  • DatagramSocket() 空构造
  • DatagramSocket(int port) 创建指定接受者端口的套接字对象
  • void send(DatagramPacket p) 发送数据包
  • void receive(DatagramPacket p) 接收数据包
  • void close() 关闭套接字
2.接收方
	/* 测试时应先启动接收方,再启动发送方 */

	//用于接收数据的缓冲区
	byte[] data=new byte[1024];
	
	//创建数据包对象
	DatagramPacket dp=new DatagramPacket(data, data.length);
	
	//创建套接字对象,设置接收方端口为3000
	DatagramSocket ds=new DatagramSocket(3000);
	
	//接收数据包
	ds.receive(dp);
	
	//获取发送者的IP地址
	String senderIP=dp.getAddress().getHostAddress();
	
	//获取发送者的端口号
	int senderPort=dp.getPort();
	
	//获取数据包的大小
	int length=dp.getLength();

	System.out.println(senderIP+":"+senderPort+"..."+new String(data,0,length));
	
	//关闭资源
	ds.close();
3.发送方
	String msg="你好";
	byte[] data=msg.getBytes();
	
	//接收者IP地址
	InetAddress receiverIP=InetAddress.getByName("127.0.0.1");
	
	//接收者端口号
	int receiverPort=3000;
	
	//创建数据包
	DatagramPacket dp=new DatagramPacket(data, data.length,receiverIP,receiverPort);
	
	//创建套接字对象
	DatagramSocket ds=new DatagramSocket();
	
	//发送数据包
	ds.send(dp);
	
	//关闭资源
	ds.close();

二.TCP

TCP:面向有连接通信,三次握手,数据安全,效率较低,区分客户端与服务器端

1.常用方法
Socket
  • Socket(String host, int port) 创建客户端的套接字对象,并设置需要访问的服务器的IP和端口
  • OutputStream getOutputStream() 获取输出流,用于客户端发送数据或服务器端响应数据
  • InputStream getInputStream() 获取输入流,用于读取客户端发送的数据或服务器端响应的数据
    -void close() 关闭套接字
ServerSocket
  • ServerSocket(int port) 创建服务器端的套接字对象,并绑定端口号
  • Socket accept() 监听并接受客户端的套接字
  • void close() 关闭套接字
2.服务器端
	//创建服务器端的套接字对象,并绑定端口号
	ServerSocket server=new ServerSocket(4000);
	
	//监听并接受客户端的套接字
	Socket socket= server.accept();
	
	//获取客户端发送数据的输入流
	InputStream in=socket.getInputStream();
	
	byte[] data=new byte[1024];
	
	//读取客户端发送的数据
	int len=in.read(data);
	String msg=new String(data,0,len);
	System.out.println(msg);
	if(msg.equals("我要登录")){
		//获取服务器端响应给客户端的输出流
		OutputStream out=socket.getOutputStream();
		//输出数据到客户端
		out.write("登录成功".getBytes());
	}
	
	//关闭资源
	socket.close();
	server.close();
3.客户端
	//创建客户端的套接字对象,并设置需要访问的服务器的IP和端口
	Socket socket=new Socket("127.0.0.1", 4000);
	
	//获取发送数据到服务器端的输出流
	OutputStream out= socket.getOutputStream();
	
	//发送数据到服务器端
	out.write("我要登录".getBytes());
	
	//获取服务器端响应返回数据的输入流
	InputStream in=socket.getInputStream();
	byte[] data=new byte[1024];
	
	//读取服务器端返回的数据
	int len=in.read(data);
	
	System.out.println(new String(data,0,len));
	
	//关闭资源
	socket.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值