【网络编程】

网络
网络编程概述

  什么是计算机网络

 不同区域的计算机(广义上的) 通过通信设备与线路连接起来,

 以实现数据(任何形式)的传输和共享的系统

 实现不同计算机之间的联系,必须有介质连接.

 最开始在一间办公室

 后来一栋楼

 一个城市

 一个国家

 全球

网络编程是什么

  聊天  -à  聊天软件  QQ

  Java语言是支持网络间的数据传输的,将底层的细节都封装起来了,

  给程序员提供了一套标准的类库

  很方便使用java语言开发可以进行网络通信的软件。

 网络编程核心问题:

 如何找到网络世界中的目标主机,以及目标软件

   win+r  cmd  ipconfig 查看自己电脑的ip

 如何安全可靠的进行数据传输

    协议 规则 

网络的一些基本知识

  网络模型

OSI参考模型,是一个理想化的标准模型

  分成7层

实际上的使用TCP/IP 参考模型

 分成4层  

    应用层(http)

    运输层(协议)

    网络层(IP)

    物理链路层(硬件设备)

  

网络传输数据为什么要分层

   在不同的层中,对数据加入不同的头(协议,ip)

   逐层分工处理

 通信要素 :ip  端口  协议

  目标主机,以及目标软件

 Ip地址(Internet Protocol Address):在网络世界中,是计算机的地址

   局域网地址:192.168.1.20  连接到路由器,会自动分配ip

   广域网地址: 家里的宽带 与外界连接

   本机地址:本地回环地址  127.0.0.1

  

端口:是计算中运行中的程序的编号,对应的是程序

     Ip找主机

     端口找程序

     IP+端口  找到目标计算机  以及你想要的程序

     端口号0-65535之间  由于0-1024被一些系统程序使用

     所以我们开发的程序可以从1020-65535区间定义,

     但是不能与已有的端口冲突

如何安全传输—通信协议

 为了安全可靠的进行数据传输,需要对传输的内容,速率,出错之后的处理办法等进行控制

而制定的一些规约,称为协议

传输层有两个主要的协议:

   TCP(传输控制协议TCP(Transmission Control Protocol))

   使用TCP协议进行数据传输前,必须先要去检测网络是否通常,

客户端是否能连接到服务器端,如果能连接到,则进行数据传输,如果连接不到,会报错

采用的是3次握手的机制

   Tcp是可靠的,相对udp 效率低

   UDP(用户数据报协议UDP(User Datagram Protocol))

 将数据封装成数据报

 数据报包含 数据 自己的ip 目标ip

 发送前不需要建立连接,直接发送 例如发射导弹(目标坐标)

 是否发送成功,不清楚,不知道

 是不安全的,但是效率高

JAVA中的两种协议下的编程   

 基于TCP协议的编程

   服务器端:

   ServerSocket serverSocket = new ServerSocket(9999);

   Socket socket = serverSocket.accept();
  客户端:
Socket socket = new Socket("127.0.0.1", 9999);
getInputStream() //
socket.getOutputStream();
基于网络编程实现客户端与服务器端互发消息
客户端

package hm;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class ClientDemo {
    public static void main(String[] args) {
       try { //创建客户端Socket 创建时就会连接服务器,检查网络是否通畅
           Socket socket = new Socket("127.0.0.1", 9999);
           while(true){
               //向服务器发送消息
               System.out.println("发一条消息吧:");
               DataOutputStream dataOut = new DataOutputStream(socket.getOutputStream());
               Scanner sc = new Scanner(System.in);
               String s = sc.next();
               dataOut.writeUTF(s);

               DataInputStream dataIn = new DataInputStream(socket.getInputStream());
               System.out.println("服务器说:"+dataIn.readUTF());

           }
       }catch (IOException e){
           e.printStackTrace();
           System.out.println("连接服务器失败");
       }
    }
}
服务器端

package hm;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerDemo {
    public static void main(String[] args) {
        try {
            //创建服务器
            ServerSocket serverSocket = new ServerSocket(9999);
            System.out.println("服务器启动成功,等待客户端连接");
            //监听客户端连接
            Socket s = serverSocket.accept();
            System.out.println("服务器连接成功");

            while(true){
                //接受客户端发送的消息
                DataInputStream dataIn = new DataInputStream(s.getInputStream());
                String s1 = dataIn.readUTF();
                System.out.println("客户端说:"+s1);
                //向客户端回复信息
                System.out.println("回复他一条消息吧:");
                DataOutputStream dataOut = new DataOutputStream(s.getOutputStream());
                Scanner scanner = new Scanner(System.in);
                String s2 = scanner.next();
                dataOut.writeUTF(s2);
            }
        }catch (IOException e){
            e.printStackTrace();
            System.out.println("服务器连接失败!");
        }
    }
}
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/2301_78168249/article/details/134817200

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值