网络编程
1.什么是网络编程
BS与CS
总结
2.网络编程三要素
1.IP
1.ipv4和ipv6
2.ipv4的细节
3.表示IP的类InetAddress
public class Test1 { public static void main(String[] args) throws UnknownHostException { //1.获取InetAddress的对象 InetAddress address = InetAddress.getByName("DESKTOP-GSO33RO"); System.out.println(address); String name = address.getHostName(); System.out.println(name);//DESKTOP-GSO33RO String ip = address.getHostAddress(); System.out.println(ip);//192.168.38.220 } }
2.端口号
3.协议
1.UDP与TCP
2.UDP代码实现
PS: 先运行接收端,再运行发送端
发送数据
package com.itheima.a02MyInetAdressDemo2; import java.io.IOException; import java.net.*; public class Test { public static void main(String[] args) throws IOException { //1.创建DatagramSocket对象 //细节: //绑定端口:以后就是通过这个端口往外发送 //空参:所有可用的端口随机一个进行使用 //有参:指定端口号进行绑定 DatagramSocket ds = new DatagramSocket(); //2.打包数据 String str = "坤坤爱打篮球"; byte[] bytes = str.getBytes(); InetAddress address = InetAddress.getByName("127.0.0.1"); int port = 10086; DatagramPacket dp = new DatagramPacket(bytes, bytes.length,address,port); //3.发送数据 ds.send(dp); //4.释放资源 ds.close(); } }
接收数据
package com.itheima.a02MyInetAdressDemo2; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class receive { public static void main(String[] args) throws IOException { //1,创建DatagramSocket对象 //细节: //在接收的时候,一定要绑定端口 //而且绑定的端口一定要跟发送的端口保持一致 DatagramSocket ds = new DatagramSocket(10086); //2.接收数据包 byte[] bytes = new byte[1024]; DatagramPacket dp = new DatagramPacket(bytes, bytes.length); ds.receive(dp); //3.解析数据包 byte[] data = dp.getData(); int len = dp.getLength(); InetAddress address = dp.getAddress(); int port = dp.getPort(); System.out.println("接收到数据" + new String(data,0,len)); System.out.println("数据来源于" + address + "该电脑中的" + port + "这个端口发出的"); //4.释放资源 ds.close(); } }
UDP三种通信方式
3.TCP通信程序
服务端代码
package com.itheima.myTCPDemo01; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //tcp协议,接收数据 //1.创建对象 ServerSocket ss = new ServerSocket(6000); //2.监听客户端的链接 Socket socket = ss.accept(); //3.从连接通道中获取输入流的数据 InputStream is = socket.getInputStream(); int b; while ((b = is.read()) != -1){ System.out.println((char) b); } is.close(); } }
服务端代码(传输中文)
package com.itheima.myTCPDemo01; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //tcp协议,接收数据 //1.创建对象 ServerSocket ss = new ServerSocket(6000); //2.监听客户端的链接 Socket socket = ss.accept(); //3.从连接通道中获取输入流的数据 InputStream is = socket.getInputStream(); //使用字符转换流 //将字节流InputStream转换成字符流InputStreamReader InputStreamReader isr = new InputStreamReader(is); //再使用字符缓冲流提高运行速率 BufferedReader br = new BufferedReader(isr); int b; while ((b = br.read()) != -1){ System.out.println((char) b); } is.close(); } }
客户端代码
package com.itheima.myTCPDemo01; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost" ,6000); //2.可以从连接通道中获取输出流 OutputStream os = socket.getOutputStream(); //写出数据 os.write("aaa".getBytes()); //3.释放资源 os.close(); socket.close(); } }