Java基础篇——网络编程
网络编程
网络编程两个首要的问题
IP和端口号
-
ip地址:InetAddress
127.0.0.1 : 本机localhost
ip地址的分类
- ipv4 / ipv6
- IPV4: 127.0.0.1 4个字节(32位),0~255
- IPV6:fe80::5478:218a:dd7c:8fd2%17 128位
- 公网-私网
- ABCD类地址(阿里面试必问)
- 192.168.xxx.xxx 局域网地址
InetAddress ip1 = InetAddress.getByName("www.baidu.com");//返回网站 InetAddress ip2 = InetAddress.getLocalHost();//返回本机地址 //地址对象也可以使用很多方法返回自身地址 ip1.getAddress(); ip1.getCanonicalHostName();//获取一个规范地址
- ipv4 / ipv6
-
端口:port
端口代表计算机上一个进程,不同进程的端口号不同,可以之区分,数量为:65535*2,tcp和udp均分
-
端口分类
共有端口:
- HTTP:80
- HTTPS:443
- FTP:21
- Telent:23
程序注册端口:
- Tomcat:8080
- MySQL:3306
- Oracle:1521...
动态、私有:...
//InetSocketAdress类,可实例化
-
-
通信协议
TCP:打电话
UDP:发短息
TCP协议互联
-
客户端
//获取服务器信息 InetAddress client =InetAddress.getByName("127.0.0.1"); int port = 30240; //连接服务器 Socket link = new Socket(client,port); //创建传输流 OutputStream os = link.getOutputStream(); os.write("这里是姬如千泷".getBytes(StandardCharsets.UTF_8)); link.shutdownOutput(); //接收服务器信息 InputStream in = link.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] array1 = new byte[1024]; int len; while((len=in.read(array1))!=-1) { baos.write(array1,0,len); } //关闭连接
-
服务器
ByteArrayOutputStream read = null; //新建端口号 ServerSocket server = new ServerSocket(30240); //获得链接信息 Socket link = server.accept(); //创建接收流 InputStream is = link.getInputStream(); //创建过渡管道流 read = new ByteArrayOutputStream(); byte[] bt = new byte[1024]; int len; while((len= is.read(bt))!=-1){ read.write(bt,0,len); } //告诉用户端接收完毕 OutputStream out = link.getOutputStream(); out.write("接收完毕,可以退出".getBytes(StandardCharsets.UTF_8)); //逐个关闭流和链接 ...
UDP协议互联
-
客户端
//建立连接 DatagramSocket client = new DatagramSocket(30240); //建包 InetAddress adress = InetAddress.getLocalHost(); int port = 30240; String str = "hello,Server"; //装包 DatagramPacket dp = new DatagramPacket(要写入的字节流,从什么地方开始写入,字节流长度,adress,port); //发送 client.send(dp); //关闭 client.close();
-
服务器
//开放端口 DatagramSocket server = new DatagramSocket(30240); //接受包 byte[] buffer = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length); server.receive(datagramPacket); //关闭端口 server.close();
URL下载资源
-
//新建一个有效地url URL url = new URL("https://p0.ssl.qhimgs1.com/sdr/400__/t01497383325fc41f94.jpg"); //用http协议连接ip HttpURLConnection connection =(HttpURLConnection) url.openConnection(); InputStream read = connection.getInputStream(); FileOutputStream write = new FileOutputStream("dog.jpg"); //下载并存储图片 byte[] buffer = new byte[1024]; int len; while((len= read.read(buffer))!=-1){ write.write(buffer,0,len); }