Java基础知识总结(六)

这篇博客详细介绍了Java的网络编程基础知识,包括UDP和TCP的原理与实现,以及TCP文件复制操作。同时,文章深入讲解了数据库的相关概念,如数据库的三大范式、常见数据库类型以及DDL和DML语句的使用,最后提到了数据库事务和JDBC的基本操作。
摘要由CSDN通过智能技术生成

网络编程:

​ 数据在网络中不断进行传输

网络三要素:

ip地址–端口–协议

  找到高圆圆
    1)网络中需要知道ip地址
    2)找到她的ip,对她说话---> 对着"耳朵"-----> 端口port
    3)对她说话 "i love you"--->   她听不懂,"我爱你"---->需要有一个规则 ----"协议"

      ip 使用点分十进制法,中间使用.隔开


            A类  国家大部门---->前一个号段是网络号段,后面三个主机号段
            B类  校园/大公司服务器机房/:前面两个网络号段,后面使用两个注解号段
            C类  私人地址:前面三个为网络号段,后面是主机号段
    
                192.168.251.1--->
      port端口
            port端口 360软件都可以查看你电脑所有客户端软件的端口号
                范围:0~65535  里面0~1024属于保留端口
      传输协议
        UDP协议--->数据报包(数据包的报文)
            1)不需要建立连接通道
            2)不可靠协议,不安全的
            3)发送数据大小有限制
        TCP协议--->最基本的字节流的方式发送数据
            1)就必须连接通道
            2)可靠协议,一种安全
            3)发送数据大小无限制



      需要访问百度服务器
      http://www.baid.com:80
      --->http:// 协议--->底层基于tcp(建立通道)
    
        www.baidu.com---->ip地址
        端口:默认80可以不写(省略)

​    查看ip地址 ipconfig windows系统
​            在Linux系统---->centos-->ifconfig

获取计算机的主机名称或者获取计算机的ip地址字符串形式?

public static InetAddress getByName(String host)

throws UnknownHostException

通过计算机主机名称或者是字符串形式的ip地址--->获取互联网ip地址对象
 *
 */
public class InetAddressDemo {
   
public static void main(String[] args) throws UnknownHostException {
   

```
//public static InetAddress getByName(String host)throws UnknownHostException
//1)可以通过计算机机器名称获取ip地址对象
InetAddress inetAddress = InetAddress.getByName("DESKTOP-Q62EUJH"); //还可以指定ip地址字符串
System.out.println(inetAddress);//DESKTOP-Q62EUJH/192.168.1.5

//互联网ip地址对象:  主机名称/ip地址字符串
//public String getHostName() :通过ip地址对象获取计算机机器名
String hostName = inetAddress.getHostName() ;
System.out.println(hostName);
//获取里面的包含ip地址字符串形式
```

//        public String getHostAddress()
    String ip = inetAddress.getHostAddress();
    System.out.println(ip);
}
}

UDP接收端的代码实现

1)创建接收端的Socket对象,绑定端口

2)创建一个接收容器—>数据包—>自定义字节缓冲区,将发送的数据包

3)接收

4)从接收容器中解析数据包的实际内容数据

5)展示数据

先运行接收端,而且接收端不能运行多次,否则端口被占用!
*/
public class UDPReceiver {
   
public static void main(String[] args) throws IOException {
   
    //1)创建接收端的Socket对象,绑定端口
    //public DatagramSocket(int port)  throws SocketException
    DatagramSocket ds = new DatagramSocket(10086) ;

```
//2)创建一个接收容器--->数据包--->自定义字节缓冲区,将发送的数据包
```

   // public DatagramPacket(byte[] buf, int length)构造一个DatagramPacket用于接收长度的数据包length 。
    byte[] bytes = new byte[1024] ;//1024或者1024整数倍
    int length = bytes.length ;
    DatagramPacket dp = new DatagramPacket(bytes,length) ; //将发送端数据缓冲到这个接收容器中

```
//3)接收,以上面这个接收容器来接收
//public void receive(DatagramPacket p)throws IOException
ds.receive(dp);

//4)从接收容器中解析数据包的实际内容数据
//从接收容器中获取public byte[] getData() 实际缓冲区的对象(从上bytes分段取数据)
byte[] bytes2 = dp.getData();
//获取里面实际缓冲区的长度
```

   // public int getLength()
    int length2 = dp.getLength();
    //展示数据---分段取数据,每次从0开始取实际长度
    String msg = new String(bytes2,0,length2) ;
    //数据包里面获取哪一个ip地址发来的--->ip地址字符串形式
    //public InetAddress getAddress()--->InetAddress--->getHostAddress()--->String IP地址字符串
    String ip = dp.getAddress().getHostAddress() ;
    System.out.println("data from --->"+ip+",发送内容是:"+msg);

```
//释放资源
ds.close();
```


    }

}

Upd方式—>不需要建立连接通道,不可靠连接

Udp发送端的步骤

1)创建发送端的socket

2)创建数据报包

3)使用发送端的Socket将数据存储数据包中, 发送(本质存储数据包)

4)释放资源

public class UdpSend {
   
public static void main(String[] args) throws IOException {
   
    //1)创建发送端的socket
    //此类表示用于发送和接收数据报数据包的套接字。 DatagramSocket
    //public DatagramSocket() throws SocketException
    DatagramSocket ds = new DatagramSocket() ;

    // 2)创建数据报包DatagramPacket
    /**
     * public DatagramPacket(byte[] buf,  要发送数据---转换成字节数组
     *                       int length,  实际字节数长度
     *                       InetAddress address,  ip地址对象
     *                       int port)  端口号
     */
    byte[] bytes = "hello,UDP我来了".getBytes() ;
    int length = bytes.length ;
    InetAddress inetAddress = InetAddress.getByName("192.168.1.5");//如果自己玩,没有网线,无线ip不断变的--->本地回环地址127.0.0.1
    int port = 10086 ;
    DatagramPacket dp = new DatagramPacket(bytes,length,inetAddress,port);
    
    //3)使用发送端的Socket将数据存储数据包中, 发送(本质存储数据包)
    //public void send(DatagramPacket p) throws IOException
    ds.send(dp) ;
    
    //4)释放资源
    ds.close() ;

}
}

UDP发送端可以不断发送数据,接收点不断展示数据,发送端可以自定义结束条件

发送端不断发送数据
需求:

UDP发送端可以不断键盘录入数据,接收端不断展示数据,

发送端可以自定义结束条件 (课堂练习)
*/
public class UdpSend {
   

public static void main(String[] args) {
   
    //UDP发送端可以不断键盘录入数据

//创建发送端的socket
DatagramSocket ds = null ;
try {
   
   ds = new DatagramSocket() ;
    //键盘录入可以使用BufferedReader--->读一行
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
    String line = null ;
    //一次读一行内容
    System.out.println("请您输一个数据");
    while((line=br.readLine())!=null){
   
        if("over".equals(line)){
   
            break;
        }
        //创建数据报包,将数据存储在数据包中
        DatagramPacket dp = new DatagramPacket(line.getBytes()
        ,line.getBytes().length,
        InetAddress.getByName("10.35.162.121"),

   6666) ;
                 //发送数据报包
                 ds.send(dp) ;
             }
         } catch (IOException e) {
   
             e.printStackTrace();
         }finally {
   
             if(ds!=null){
   
                 ds.close() ;
             }
         }

}

}
接收端不断接收数据并展示数据
接收端不断展示数据------->接收端模拟真实,不需要关闭
*/
public class UdpReceive {
   
public static void main(String[] args) {
   

try {
   
    //创建接收端的Socket对象
    DatagramSocket ds = new DatagramSocket(6666) ;while(true){
   //创建一个接收容器//自定义一个字节数组缓冲区byte[] buffer = new
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值