.net byte转java byte_java笔记之网络编程

常用命令

  • ipconfig:查看本机ip地址
  • ping ip地址:检查网络是否连通

fef76cf8a99bc680d8752c58b9b04a2b.png
ipconfig

258330397fb972cc7a893757ea0cca9c.png
ping www.itheima.com

InetAddress类

为了方便我们对IP地址的获取和操作,Java提供了一个类InetAddress供我们使用

inetAddress:此类表示internet协议(ip)地址

InetAddress address = InetAddress.getByName("DESKTOP-UHH1RA3");
		
		//返回主机名
		String hostname = address.getHostName();
		System.out.println(hostname);
		
		//返回ip
		String ip = address.getHostAddress();
		System.out.println(ip);

协议

udp协议(用户数据报协议),UDP是面向无连接通信协议 速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。

tcp传输控制协议,面向连接的通信协议,速度慢,没有大小限制,数据安全。

UDP通信

  1. 发送端的DatagramSocket对象
  2. 创建数据,并把数据打包(DatagramPacket)
  3. 调用DatagramSocket对象的方法发送数据
  4. 释放资源

发动端代码

//发送端
package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class ClientDemo {
	public static void main(String[] args) throws IOException {
		//1找码头(创建码头对象)
		DatagramSocket ds = new DatagramSocket();
		//2打包礼物(创建包裹对象)
		String s = "送给村长老丈人的礼物";
		byte[] bytes = s.getBytes();
		InetAddress address = InetAddress.getByName("127.0.0.1");
		int port = 10000;
		DatagramPacket dp  = new DatagramPacket(bytes,bytes.length,address,port);
		//3发送包裹
		ds.send(dp);
		//4付钱走 
		ds.close();
	}
}
  1. 找码头 -创建接收端的DatagramSocket对象
  2. 找新箱子-创建一个箱子,用于接收数据
  3. 码头接收礼物并放入新箱子中 -调用DatagramSocket的方法接收数据并放入箱子中
  4. 村长从箱子中获取礼物 -解析数据宝,并把数据在控制台显示
  5. 拿完走 -释放资源

接收端代码(注意:要先运行接收端再运行发送端)如果接收端启动后没有接收到数据,那么会死等(阻塞)

接收端代码

package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ServerDemo {
	public static void main(String[] args) throws IOException {

		// 1找码头     表示接收端从10000端口接收数据
		DatagramSocket ds = new DatagramSocket(10000);
		// 2创建一个新的箱子
		byte[] bytes = new byte[1024];
		
		DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
		// 3接收礼物,把礼物放到新的箱子中
		ds.receive(dp);
		// 4从新的箱子里面拿礼物
		byte[] data = dp.getData();
		System.out.println(new String(data));
		// 5拿完走 
		ds.close();
	}
}

UDP练习(单播)

* UDP发送数据:数据来源键盘录入,指导输入的数据是886,发送数据结束

* UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

客户端

package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

public class UdpCilent {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		DatagramSocket ds = new DatagramSocket();

		while (true) {
			String s = sc.nextLine();
			if ("886".equals(s)) {
				break;
			}
			byte[] bytes = s.getBytes();// 把传输的话变成字节数组
			InetAddress addres = InetAddress.getByName("127.0.0.1");//
			int port = 10000;
			DatagramPacket dp = new DatagramPacket(bytes, bytes.length, addres, port);

			ds.send(dp);
		}
		ds.close();
	}
}

接收端

package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpServer {
	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket(10000);
		while (true) {
			byte[] bytes = new byte[1024];
			DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
			ds.receive(dp);

			byte[] data = dp.getData();
			int length = dp.getLength();
			System.out.println(new String(data,0,length));
		}
//		ds.close();
	}

}

UDP通讯程序 udp的三种通信方式

  1. 单播:一个发送端通过路由器发送一个接收端
  2. 组播:一个发送端通过路由器发送一组接收端
  3. 广播:一个发送端通过路由器发送给局域网接收端

组播代码实现

组播地址:224.0.0.0~239.255.255.255

其中224.0.0.0~224.0.0.255为预留的组播地址

组播发送端

  1. 创建发送端的Socket对象(DatagramSocket)
  2. 创建数据,并把数据打包(DatagramPacket)
  3. 调用DatagramSocket对象的方法发送数据 注意:在单播种,这里发送的是指定IP电脑,但是在组播种这里发送的是组播地址
  4. 释放资源
package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class ClientDemoZ {
	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket();
		
		String s = "组播";
		byte[] bytes = s.getBytes();
		InetAddress address = InetAddress.getByName("224.0.1.0");
		int port = 10000;
		DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
		ds.send(dp);
		ds.close();
	}
}

组播接收端

  1. 创建接收端的Socket对象(MulticastSocket)
  2. ......
package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

public class ServerDemoZ {
	public static void main(String[] args) throws IOException {
		MulticastSocket ms = new MulticastSocket(10000);
		
		DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
		
		//把当前计算机绑定一个组播地址,表示添加到一组中
		ms.joinGroup(InetAddress.getByName("224.0.1.0"));
		ms.receive(dp);
		byte[] data = dp.getData();
		int length = dp.getLength();
		System.out.println(new String(data,0,length));
		ms.close();
	}
}

UDP广播代码实现

广播地址:255.255.255.255

客户端

package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;

public class ClientDemoG {
	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket();
		
		String s = "广播";
		byte[] bytes = s.getBytes();
		InetAddress address = InetAddress.getByName("255.255.255.255");
		int port = 10000;
		DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
		
		ds.send(dp);
		ds.close();
	}
}

服务器端

package tcp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ServerDemoG {
	public static void main(String[] args) throws IOException {
		DatagramSocket ds = new DatagramSocket(10000);
		
		DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
		
		ds.receive(dp);
		
		byte[] data = dp.getData();
		int length = dp.getLength();
		System.out.println(new String(data,0,length));
		ds.close();
	}
}

TCP通信原理

tcp通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。

通信之前要保证连接已经建立

通过Socket产生io流来进行网络通信

客户端步骤

  1. 创建Socket对象(Socket)与指定服务端连接 Socket(String host,int port)
  2. 获取输出流,写数据OutputStreamgetoutputStream()
  3. 释放资源
package tcp2;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientTcp {
	public static void main(String[] args) throws UnknownHostException, IOException {
		//1创建一个Socket对象
		Socket socket = new Socket("127.0.0.1",10000);
		//2获取一个IO流开始写数据
		OutputStream os = socket.getOutputStream();//字节流
		os.write("hello".getBytes());
		//3释放资源
		os.close();
		socket.close();
	}
}

服务端步骤

  1. 创建服务端的Socket对象(ServerSocket)ServerSocket(int port)
  2. 监听客户端连接返回一个Socket对象
  3. 获取输入流,读数据,并把数据显示在控制台
  4. 释放资源
package tcp2;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServetTcp {
	public static void main(String[] args) throws IOException {
		// 1创建服务端的Socket对象(ServerSocket)
		ServerSocket ss = new ServerSocket(10000);
		// 2等待客户端连接
		System.out.println(111);//
		Socket accept = ss.accept();
		System.out.println(222);//
		// 3获取输入流,读数据,并把数据显示在控制台
		InputStream is = accept.getInputStream();//输入流
		int b;
		while((b=is.read())!=-1) {
			System.out.print((char)b);
		}
		// 4释放资源
		is.close();
		ss.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值