IP: InetAddress

  • 唯一定位网络上的计算机
  • 127.0.0.1        本机localhost
  • ip地址分类  IPV4/IPV6
  1. IPV4        4个字节(0~255)共42亿        110.242.69.7
  2. IPV6        128位16字节 8个无符号整数     fd6d:a06a:4864:0:6de5:84a5:ce7:de56
  • ip地址分类  互联网——局域网
  1. 局域网        128.168.x.x
  2. ABCD类    A:1.0.0.0---127.255.255.255(1677_7214台)   B:128.0.0.0---191.255.255.255(6万多台)C:192.0.0.0---223.255.255.255(254台)  D:224.0.0.0---239.255.255.255
  • InetAddress inetAddress0 = InetAddress.getByName("www.bilibili.com");查询网站ip地址
  • InetAddress inetAddress2 = InetAddress.getLocalHost();获取本机ip地址
  • 常用方法:inetaddress.getCanonicalHostName() 【规范名字】     inetaddress.getHostAddress()【ip】 inetaddress.getHostName()【域名】
package hk.tcp_udp_url.lesson1;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddress1 {public static void main(String[] args) {try{InetAddress inetAddress = InetAddress.getByName("127.0.0.1");System.out.println(inetAddress);InetAddress inetAddress0 = InetAddress.getByName("www.bilibili.com");System.out.println(inetAddress0);}catch (UnknownHostException e){e.printStackTrace();}}
}

 端口

  • 端口表示计算机上的一个程序进程
  • 不同的进程有不同的端口号,用来区分软件
  • TCP,UDP: 端口号0~65535              单个协议下端口号不能冲突                        65535*2     
  •  端口分类
  1. 共有端口     0~1023           尽量不要占用

    1. HTTP:80
    2. HTTPS:443
    3. FTP:21          T
    4. elent:23
  2. 程序注册端口:2014~49151
    • Tomcat:8080
    • MySQL:3306
    • Oracle:1521
  3. 动态,私有          49152~65535
    • cmd查看所有端口命令

      • netstat -nao
    • 查看指定端口
      • netstat -nao|findstr "xxx"

    • 查看指定端口进程
      • tasklist|findstr "xxx"

  4. InetSocketAddress
System.out.println(inetSocketAddress.getPort());//端口
System.out.println(inetSocketAddress.getHostName());//ip地址
package hk.tcp_udp_url.lesson1;import java.net.InetSocketAddress;public class Lesson2 {public static void main(String[] args) {InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);System.out.println(inetSocketAddress);System.out.println(inetSocketAddress.getAddress());System.out.println(inetSocketAddress.getPort());//端口System.out.println(inetSocketAddress.getHostName());//ip地址}
}

 通信协议

TCP/IP协议簇        一组协议

TCP:用户传输协议                需要连接才能发送        三次握手;四次挥手

UDP:用户数据报协议             不用连接就能发送(DDos攻击)

TCP 通信:

客户端:

1.        获取地址,端口;连接服务器socket

socket = new Socket(byName【地址】,port【端口】);

2.        发送消息

outputStream = socket.getOutputStream();
outputStream.write("你好,连接成功了吗?".getBytes(StandardCharsets.UTF_8));
package hk.tcp_udp_url.TCP.deom1;import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;public class Client {public static void main(String[] args) {Socket socket =null;OutputStream outputStream =null;try {//获取地址InetAddress byName = InetAddress.getByName("127.0.0.1");//端口int port =9999;//创建端口socket连接socket = new Socket(byName,port);//发送消息outputStream = socket.getOutputStream();outputStream.write("你好,连接成功了吗?".getBytes(StandardCharsets.UTF_8));}catch (Exception e){e.printStackTrace();}finally {if (outputStream!=null){try {outputStream.close();}catch (IOException e){e.printStackTrace();}}if (socket!=null){try {socket.close();}catch (IOException e){e.printStackTrace();}}}}
}

服务端:

1.        建立端口ServerSocket

2.        等待客户端连接accept

3.        接收信息inputStream

package hk.tcp_udp_url.TCP.deom1;import java.io.ByteArrayOutputStream;
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) {ServerSocket serverSocket =null;Socket socket=null;InputStream inputStream =null;ByteArrayOutputStream byteArrayOutputStream =null;try {//创建地址serverSocket = new ServerSocket(9999);while (true){//等待客户端连接socket=serverSocket.accept();//读取客户端信息inputStream = socket.getInputStream();//管道流byteArrayOutputStream = new ByteArrayOutputStream();byte[] buffer=new byte[1024];int len;while((len=inputStream.read(buffer))!=-1){byteArrayOutputStream.write(buffer,0,len);}System.out.println(byteArrayOutputStream.toString());}}catch (IOException e){e.printStackTrace();}finally {//关闭流//后创建的先关闭if (byteArrayOutputStream!=null){try {byteArrayOutputStream.close();}catch (IOException e){e.printStackTrace();}}if (inputStream!=null){try {inputStream.close();}catch (IOException e){e.printStackTrace();}}if (socket!=null){try {socket.close();}catch (IOException e){e.printStackTrace();}}if (serverSocket!=null){try {serverSocket.close();}catch (IOException e){e.printStackTrace();}}}}
}

TCP:        传文件

服务端

{public static void main(String[] args) {ServerSocket serverSocket =null;Socket accept =null;InputStream inputStream =null;FileOutputStream fileOutputStream =null;try {//创建地址serverSocket = new ServerSocket(9611);//等待客户连接accept = serverSocket.accept();//读取输入流inputStream = accept.getInputStream();//管道输出流fileOutputStream = new FileOutputStream(new File("C:\\Users\\hk\\Desktop\\002.jpg"));byte[] bytes = new byte[1024];int len;while((len=inputStream.read(bytes))!=-1){fileOutputStream.write(bytes,0,len);}//通知客户端接收完毕OutputStream outputStream = accept.getOutputStream();outputStream.write("接收完毕,可以断开".getBytes(StandardCharsets.UTF_8));//关闭资源serverSocket.close();accept.close();inputStream.close();fileOutputStream.close();}catch (IOException e) {e.printStackTrace();}}
}

客户端

package hk.tcp_udp_url.TCP.file;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;public class Client1 {public static void main(String[] args) throws Exception{//连接服务器socketSocket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9611);//创建一个输出流OutputStream outputStream = socket.getOutputStream();//读取文件FileInputStream fileInputStream = new FileInputStream(new File("C:\\Users\\hk\\Desktop\\《火影忍者》九只尾兽4k壁纸图片.jpg"));//写出文件byte[] bytes = new byte[1024];int len;while ((len=fileInputStream.read(bytes))!=-1){outputStream.write(bytes,0,len);}//终断输出流socket.shutdownOutput();//确定服务端接收完毕InputStream inputStream = socket.getInputStream();//管道流接收ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] bytes1 = new byte[1024];int len1;while((len1=inputStream.read(bytes1))!=-1){byteArrayOutputStream.write(bytes1,0,len1);}System.out.println(byteArrayOutputStream.toString());//关闭资源inputStream.close();byteArrayOutputStream.close();fileInputStream.close();outputStream.close();socket.close();}

UDP                不用连接,只需地址

udp发送消息

发送端

package hk.tcp_udp_url.udp.deom1;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;public class Client {public static void main(String[] args) throws Exception{//建立个SocketDatagramSocket datagramSocket = new DatagramSocket();//建包String msg="Hello,world";InetAddress localhost = InetAddress.getByName("localhost");int port=12900;DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(StandardCharsets.UTF_8),0,msg.getBytes().length,localhost,port);//发送包datagramSocket.send(datagramPacket);datagramSocket.close();}
}

接收端

package hk.tcp_udp_url.udp.deom1;import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Server {public static void main(String[] args) throws Exception{//开放端口DatagramSocket datagramSocket = new DatagramSocket(12900);//接收包byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);datagramSocket.receive(datagramPacket);//阻塞接收System.out.println(datagramPacket.getAddress().getHostAddress());System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getData().length));//关闭连接datagramSocket.close();}
}

单方向连续发送信息

发送方

package hk.tcp_udp_url.udp.deom2;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;public class Sender {public static void main(String[] args) throws Exception {DatagramSocket datagramSocket = new DatagramSocket(19000);//从system.in读取数据BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));while(true){String data= bufferedReader.readLine();byte[] datas=data.getBytes(StandardCharsets.UTF_8);DatagramPacket datagramPacket = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",7922));datagramSocket.send(datagramPacket);if (data.equals("拜拜")){break;}}datagramSocket.close();}
}

接收方

package hk.tcp_udp_url.udp.deom2;import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Receive {public static void main(String[] args) throws  Exception {DatagramSocket datagramSocket = new DatagramSocket(7922);while (true) {//接收信息byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);datagramSocket.receive(datagramPacket);//断开判断  “拜拜”byte[] data = datagramPacket.getData();String datas = new String(data, 0, datagramPacket.getLength());System.out.println(datas);if (datas.equals("拜拜")) {break;}}datagramSocket.close();}
}

UDP        多线程        双向通信

package hk.tcp_udp_url.udp.deom3;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class TalkReceive implements Runnable{DatagramSocket datagramSocket =null;private int port;private String msf;public TalkReceive(int port,String msf)throws Exception {this.port=port;this.msf=msf;datagramSocket=new DatagramSocket(this.port);}@Overridepublic void run() {while(true){try {//接收信息byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length);datagramSocket.receive(datagramPacket);//断开判断  “拜拜”byte[] data = datagramPacket.getData();String datas = new String(data, 0, datagramPacket.getLength());System.out.println(msf+" :"+datas);if (datas.equals("拜拜")) {break;}} catch (IOException e) {e.printStackTrace();}}datagramSocket.close();}
}
package hk.tcp_udp_url.udp.deom3;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;public class TalkSend implements Runnable{DatagramSocket datagramSocket =null;BufferedReader bufferedReader =null;private int fromPort;private String toIP;private int toPort;public TalkSend(int fromPort,String toIP,int toPort) {this.fromPort=fromPort;this.toIP=toIP;this.toPort=toPort;try{datagramSocket = new DatagramSocket(fromPort);bufferedReader = new BufferedReader(new InputStreamReader(System.in));}catch (Exception e){e.printStackTrace();}}@Overridepublic void run() {while (true){try {String data= bufferedReader.readLine();byte[] datas=data.getBytes(StandardCharsets.UTF_8);DatagramPacket datagramPacket = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));datagramSocket.send(datagramPacket);if (data.equals("拜拜")){break;}}catch (Exception e){e.printStackTrace();}}datagramSocket.close();}
}
package hk.tcp_udp_url.udp.deom3;public class Talk1 {public static void main(String[] args) throws Exception {//开启线程new Thread(new TalkSend(2291,"127.0.0.1",2223)).start();new Thread(new TalkReceive(2222,"P2")).start();}
}
package hk.tcp_udp_url.udp.deom3;public class Talk2 {public static void main(String[] args) throws Exception {new Thread(new TalkSend(2842,"127.0.0.1",2222)).start();new Thread(new TalkReceive(2223,"P1")).start();}
}

URL                【爬虫,python方便】

package hk.tcp_udp_url;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;public class URL0 {public static void main(String[] args) throws IOException {//创建URL类URL url = new URL("https://github.com");//连接url的HTTPHttpURLConnection urlConnection =(HttpURLConnection) url.openConnection();InputStream inputStream = urlConnection.getInputStream();FileOutputStream urltext = new FileOutputStream("urltext");byte[] bytes = new byte[1024];int len;while ((len=inputStream.read(bytes))!=-1){urltext.write(bytes,0,len);}urltext.close();inputStream.close();urlConnection.disconnect();//断开连接}
}

JAVA网络编程 【子】相关推荐

  1. JAVA网络编程个人笔记 第4章 inet地址

    JAVA网络编程个人笔记 第4章 inet地址 Internet寻址 创建InetAddress对象 常用方法 getLocalHost() 代码实现 getByName() 代码实现 getAllB ...

  2. Java 网络编程系列之 NIO

    Java 网络编程系列之 NIO 第 1 章Java NIO 概述 1.1 IO 概述 IO 的操作方式 1.2 阻塞 IO (BIO) 1.3 非阻塞 IO(NIO) 1.4 异步非阻塞 IO(AI ...

  3. Java网络编程与NIO学习总结

    #Java网络编程与NIO学习总结 这篇总结主要是基于我之前Java网络编程与NIO系列文章而形成的的.主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点.谢谢 #更多详细内容可 ...

  4. 13. Java网络编程

    Java网络编程 1. 网络通信三要素 1.1 概述 1.2 要素一:IP地址 1.3 IP地址操作类-InetAddress 1.4 要素二:端口号 1.5 要素三:协议 2. UDP通信 2.1 ...

  5. java 密钥工厂 desede_20145212 实验五《Java网络编程》

    20145212 实验五<Java网络编程> 一.实验内容1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成代 ...

  6. Java学习总结:52(Java网络编程)

    Java网络编程 开发第一个网络程序 java.net包提供了网络编程有关的开发工具类,在此包中有一下两个主要的核心操作类. ServerSocket类:是一个封装支持的TCP协议的操作类,主要工作在 ...

  7. Java - 网络编程(NetWork)

    Java - 网络编程(NetWork) 一.java.net包下的 InetAddress 类的使用: > 一个 InetAddress 代表着一个IP地址 > 主要用来查看本机的IP和 ...

  8. 【Java】 Java网络编程总结

     一.网络编程三要素: IP地址:每个设备在网络中的唯一标识. 端口号:每个程序在设备上的唯一标识. 协议:为计算机网络中进行数据交换而建立的规则或约定的集合. UDP: 面向无连接,数据不安全,速度 ...

  9. Java网络编程笔记5

    在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的S ...

  10. 实验五 Java网络编程及安全 实验报告 20135232王玥

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序与设计         班级:1352 姓名:王玥 学号:20135232 成绩:             指导 ...

最新文章

  1. 高中上不上分数低学计算机,中考分数低该怎么办 上不了高中有什么出路
  2. 可以在手机里运行的Detectron2来了:Facebook官方出品,支持端到端模型训练、量化和部署...
  3. OD使用教程 调试篇
  4. 码牛安卓移动互联网高级开发正式课
  5. java jar包详解_Jar打包用法详解
  6. 《算法导论》——MergeSort
  7. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
  8. 想用Python做自动化测试?Python反射机制的应用
  9. jni数组使用(二)
  10. day 21 模块 和 包
  11. java泛型类型擦除
  12. 【GNN】图嵌入之 node2vec:网络的可扩展特征学习
  13. 解决DNS解析故障的几种方法
  14. 基于情感词典的文本情感分类
  15. 下一代无服务器的发展形态: Serverless2.0
  16. Appium +iOS 自动化测试全网最全教程(实践、总结 、踩坑)
  17. No Silver Bullet: Essence and Accidents of Software | 没有银弹:软件开发中的主要问题和次要问题
  18. ESP32 学习日志(5)——NVS
  19. 情感分类——Attention(前篇续)
  20. Opencv实战 文字区域的提取

热门文章

  1. 生活的苦 VS 学习的苦
  2. schedule任务调度及其用法(多线程并发)
  3. GDT与LDT的区别
  4. Java WeakHashMap
  5. 【汇正财经】12.21日盘面回顾和行情解析
  6. 学习Redis的一本好书: Redis Essentials
  7. 二进制图像、灰度图像、RGB图像、索引图像
  8. 大学毕业后坚持学习有什么用
  9. 手机自带计算机删了怎么恢复出厂设置,电脑的恢复出厂设置在哪里 如果是出厂设置肯定是删除所...
  10. php验证是否图片,php验证码图片不显示图片怎么办