JAVA学习总结7.21

网络编程

OSI参考模型(图网上找的)

网络:将不同区域计算机连接到一起(局域网,互联网)

地址:确定网络上一个绝对位置(例如房子的地址)

端口号:区分计算机软件(例如房子的房门  两个字节0-65535)

                在同一个协议下端口号不能重复,不同协议下可以重复

                1024以下的端口号一般都已经被大厂预定了 80->http

资源定位:URL 统一资源定位符  URI:统一资源

数据传输:1、协议:Tcp和UDP协议

                        Tcp(transfer:类似于电话   面向安全不过效率低下

                        UDP:短信 非面向链接 效率高 传输不可靠

                  2、传输

                         先封装 后拆封

类:1、InetAddress封装DNS及IP     
方法:  

InetAddress.getHouseAddress();   InetAddress.getHouseName("ip地址");

            getHouseAddress()返回ip地址        getHouseName()返回域名|本机为计算机                

         InetSocketAddress封装端口       

          方法:

InetSocketAddress.getHouseAddress(String hostname,int port); 


   InetSocketAddress.getHouseAddress(InetAddress addr ,int port);   

        2、URL

创建:URL(String spec)      绝对路径构建          URL(URL connect,String spec)  相对路径构建

        

URL url=new URL("www.baidu.com:80/xxxxx");//绝对路径构建
url=new URL(url,"/b.txt");//相对路径构建

        3、TCP:ServerSocket Socket

        4、UDP:以数据为中心 非面向链接 不安全but效率高

(1) 客户端:

        创建客户端 DatagramSocket类-》准备数据 字节数组-》打包  DatagramPacket+服务器地址及端口-》发送-》释放资源

(2)服务器端:

                创建服务器DatagramSocket+指定窗口 -》准备接受容器 封装DatagramPacket-》包 接收数据-》分析-》释放资源

   DatagramSocket

//构造方法,创建数据报套接字并将其绑定到本地主机上的指定端口
DatagramSocket socket = new DatagramSocket(0);	

 DatagramPacket

DatagramPacket(byte[] buf,int offset,InetAddress address,int port);//建立要发送的UDP包

 BS和CS的区别以及优缺点

BS:客户端电脑负荷简化,减轻了系统维护、升级的支出成本,降低了用户的总体成本

要求有操作系统和浏览器就行,与操作系统平台无关,对设备要求较低。

CS:交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据

一般只用于局域网 对设备要求高

总结:CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。日常办公应用BS,在实际生产中使用CS结构。

TCP通信

客户端:

public class ChatClient {
    private String host = "localhost";
    private int port = 8189;

    public ChatClient() {

    }
    public ChatClient(String host, int port) {
        this.host = host;
        this.port = port;
    }
    public void chat() {
        try {
            Socket socket = new Socket(host, port);

            try {

                DataInputStream in = new DataInputStream(socket
                        .getInputStream());

                DataOutputStream out = new DataOutputStream(socket
                        .getOutputStream());


                Scanner scanner = new Scanner(System.in);

                while (true) {
                    String send = scanner.nextLine();//读取控制台输入的内容
                    System.out.println("客户端:" + send);//输出键盘输出内容提示 ,也就是客户端向服务器端发送的消息
                    // 把从控制台得到的信息传送给服务器
                    out.writeUTF("客户端:" + send);//将客户端的信息传递给服务器             
                    String accpet = in.readUTF();// 读取来自服务器的信息
                    System.out.println(accpet);//输出来自服务器的信息
                }

            } finally {
                socket.close();//关闭Socket监听
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ChatClient().chat();
    }
}

服务器端:

public class ChatServer {
    private int port = 8189;

    public ChatServer() {

    }  

    // 创建指定端口的服务器  
    public ChatServer(int port) {//构造方法  
        this.port = port;
    }  

    public void service() {
        try {// 建立服务器连接  
            ServerSocket server = new ServerSocket(port);//创建  ServerSocket          
            Socket socket = server.accept();// 等待客户连接  
            try {                  
                DataInputStream in = new DataInputStream(socket  
                        .getInputStream());// 读取客户端传过来信息               
                DataOutputStream out = new DataOutputStream(socket  
                        .getOutputStream());// 向客户端发送信息                  
                Scanner scanner = new Scanner(System.in);//从键盘接受数据  
                while (true) {                       
                    String accpet = in.readUTF();// 读取来自客户端的信息   
                    System.out.println(accpet);//输出来自客户端的信息  
                    String send = scanner.nextLine();//nextLine方式接受字符串  
                    System.out.println("服务器:" + send);//输出提示信息                        
                    out.writeUTF("服务器:" + send);//把服务器端的输入发给客户端   
                }  
            } finally {// 建立连接失败的话不会执行socket.close();
                socket.close();//关闭连接 
                server.close();//关闭                
            }  
        } catch (IOException e) {//捕获异常
            e.printStackTrace();  
        }  
    }  

    public static void main(String[] args) {//主程序方法  
        new ChatServer().service();//调用 service方法 
    }  
}  

两篇端口代码转载自这大佬写的

主要还没完全学明白,,,,,理解并按照步骤一步一步敲的。。。。。

tps:运行前建立两个控制台窗口。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值