栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习java 第八天

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习java 第八天

网络编程

打电话:TCP 发短信:UDP

网络通信的要素

1、网络编程中有两个主要的问题

如何准确的定位网络上的一台或多台主机

找到主机之后如何进行编程

2、网络编程中的要素

ip 和 端口号

网络通信协议 UDP TCP

3、万物皆对象

IP

ip地址:InetAddress(无构造器)

唯一定位一台网路上的计算机

127.0.0.1 : 本机localhost

ip地址分类

ipv4/ipv6

ipv4 127.0.0.1 ,由4个字节组成,,0-255 ,42亿个;

ipv6 128位 ,8个无符号整数

公网(互联网)-私网(局域网)

192.168.xx.xx 专门给组织内部使用

ABCD类地址

端口

端口表示计算机上的一个程序进程

不同的进程有不同的端口号 用来区分软件

被规定 0-65536

单个协议下,端口号不能冲突

端口分类

公有端口 0~1023

http:80

https:443

ftp:21

Telent:23

程序注册端口: 1024-49151,分配用户程序

Tomcat:8080

MySQL:3306

Oracle:1521

动态、私有端口:49152~65535

cmd查看所有端口:netstat -ano

cmd查看指定端口:netstat -ano|findstr “”

通信协议

网络通信协议:速率、传输码率、代码结构、传输控制等等

TCP/IP:用户传输协议 UDP:用户数据协议

TCP UDP对比:

TCP:打电话

连接,稳定

三次握手,四次挥手

至少需要三次通信才能保证稳定连接(/ /)

至少需要四次通信才能保证断开(/ /)

客户端,服务端

传输完成,释放连接,效率低

UDP:发短信

不连接,不稳定

客户端,服务端,没有明确的界限

无论有没有准备好,都可以发

DDoS:洪水攻击(饱和攻击)

TCP

客户端

1、连接服务器Socket

2、发送消息

服务器

1、建立服务的端口 SeverSocket

2、等待用户的连接 accept

3、接收用户的消息

Tomcat

服务端

自定义S

Tomcat服务器S : java后台开发!

客户端

自定义C

浏览器B

★ 同一个协议下端口号不能重复使用

UDP

发短信:不用连接,需要知道对方的地址

发送端

package UDP;
​
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
​
public class udpClientDemo01 {
public static void main(String[] args) throws Exception {
   //创建socket
   DatagramSocket socket = new DatagramSocket();
   //建一个包
   String msg = "你好呀,服务器!";
​
   InetAddress localhost = InetAddress.getByName("localhost");
​
   int poor = 9090;
   //发送的数据,数据长度,发送给谁,
   DatagramPacket Packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,poor);
   //发送数据
   socket.send(Packet);
   //关闭流
   socket.close();
}
}
​

接收端

package UDP;
​
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
​
public class udpServerDemo01 {
public static void main(String[] args) throws Exception {
   //开放端口
   DatagramSocket socket = new DatagramSocket(9090);
   //接收数据包
   byte[] buffer = new byte[1024];
   DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
   socket.receive(packet);
   System.out.println(new String(packet.getData(),0,packet.getLength()));
   //关闭连接
   socket.close();
}
}
​

互相发送(模拟聊天)

发送方

import java.awt.desktop.SystemSleepEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
​
public class TalkSend implements Runnable{
    DatagramSocket socket = null;
    BufferedReader reader = null;
​
    private int  fromprot;
    private String toIP;
    private int toPort;
​
    public TalkSend(int fromprot, String toIP, int toPort) {
        this.fromprot = fromprot;
        this.toIP = toIP;
        this.toPort = toPort;
        try {
            socket = new DatagramSocket(fromprot);
            reader = new BufferedReader(new InputStreamReader(System.in));
        } catch (SocketException e) {
            e.printStackTrace();
        }
    }
​
    @Override
    public void run() {
        while (true){
            try {
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas,0,datas.length, new InetSocketAddress(this.toIP,this.toPort));
                socket.send(packet);
​
                if (data.equals("bye")){
                    break;
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

接收方

import javax.sound.sampled.Port;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Socket;
import java.net.SocketException;
import java.text.BreakIterator;
​
public class TalkReceive implements Runnable{
    DatagramSocket socket = null;
    private int Prot;
    private  String from;
​
    public TalkReceive( int Prot,String from) {
        this.Prot = Prot;
        this.from = from;
        try {
            socket = new DatagramSocket(Prot);
        }catch (SocketException e){
            e.printStackTrace();
        }
​
    }
​
    @Override
    public void run() {
        while (true){
            try {
                //准备接收包裹
                byte[] bytes = new byte[1024];
                DatagramPacket Package = new DatagramPacket(bytes,0,bytes.length);
                socket.receive(Package);//阻塞式接收包
​
                //断开连接 bye
                byte[] data = Package.getData();
                String receivedata = new String(data,0,data.length);
                System.out.println(from+":"+receivedata);
​
                if (receivedata.equals("bye")){
                    break;
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        socket.close();
    }
}

URL

统一资源定位符:用来定位互联网上的某一个资源

协议://IP地址:端口/项目名/资源
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785810.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号