0828总结

0828总结

网络编程

计算机网络:是不同地区,通过网络来传递数据,来进行数据的交互
网络编程的三大要素:1.ip;2.端口号;3.协议

ip

ip 是每一台电脑的唯一标识

ip4

由0-255组成,有四个字节,一般网络都是 192.168(c类网络)
一般政府、军事用途(a类网络)
一般子网:10.08;本地的特殊ip是127.0.0.1(this)
查看当前电脑的ip地址:cmd里面输入ipconfig
拼服务器是否连通:拼ip地址(重点)

ip6

由8个数组组成,四个16进制组成

InetAddress类

Java提供的获取ip的类
返回本地主机:InetAddress getLocalHost()
获取ip地址:String getHostAddress()
获取ip的主机名:String getHostName()

端口号

每一个软件(每一个进程)的唯一标识
当软件开启之后,系统给其生成的一个,也可以自己去设置;当软件开启是端口号系统产生,当软件关闭的时候,回收

常见的端口号

Tomcat:8080
oracle:1521
mysql:3306
qq:4000
邮箱的端口号: 网易 137

协议

各个计算机网络传输的一个规范:协议分为7层
主要的是传输层:TCP、UDP、xmpp 协议–>即时通讯(qq,微信)
web阶段:http 协议、https 协议
UDP 面向无连接的协议:传输的数据快,但是可以会丢数据(cts、飞秋)、会出现卡顿
TCP 面向连接的协议:传输慢,不会丢失数据(三次握手)【qq传消息,文字需要准确性,使用的就是这个协议】

http 与 https 都是属于一次性的连接;也就是客户端给服务器发送请求,当交互完,这个请求就断开了

https:http+ssl 证书,这个证书保证数据的传输的安全性,大部分上线的网站都会使用https协议

TCP协议

Socket 对象:接字是两台机器间通信的端点

构造方法

public Socket(String host,int port)
传递两个参数:一个ip地址,一个是端口号
如果是本机ip地址传递 localhost

常规的方法

写数据的流对象:getOutputStream()
读取数据的对象:getInputStream()
刷新:shutdownOutput() 【类似于flush()方法】

客户端:发送消息的过程
1、实例化这个socket对象
2、通过socket对象得到输出流 OutputStream
3、调用 write()
4、shutdownOutput()

public class Kehu {
    public static void main(String[] args) {
        Socket socket= null;
        try {
            socket = new Socket("localhost",8989);
            OutputStream os=socket.getOutputStream();
            InputStream is=socket.getInputStream();
            os.write("你好吗".getBytes());
            socket.shutdownOutput();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器:接收信息的过程
1、实例化ServerSocke
2、调用 accept() ;返回的是一个socket对象
3、拿到输入流 InputStream
4、new BufferReader(new InputStreamReader(new FileInputStream))

public class Service {
    public static void main(String[] args) {
        ServerSocket serverSocket= null;
        try {
            serverSocket = new ServerSocket(8989);
            Socket socket=serverSocket.accept();
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str=null;
            while ((str=br.readLine())!=null){
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意:要先运行服务器,再运行客户端
如果有两个客户端,一个服务器,就会产生一个错误:Connection refused: connect
解决多个客户端对应一个服务器的问题:用多线程解决
线程类里:

/*相当于把serverSocket = new ServerSocket(8989);
和Socket socket=serverSocket.accept();移出run方法里面,再构造一个socket*/
public class MyThread extends Thread{
    private Socket socket;

    public MyThread(Socket socket) {
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String str=null;
            while ((str=br.readLine())!=null){
                System.out.println(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务类

public class Ser {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket=new ServerSocket(8889);
            Socket socket=null;
            while (true){
                socket=serverSocket.accept();
                MyThread myThread=new MyThread(socket);
                myThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用socket实现文件上传的功能:
客户端:
1、读取出需要上传的图片
2、通过socket拿到的输出流写入到服务器
服务器:
1、通过socket拿到输入流把图片读取出来(1、创建文件夹保存图片;2、注意避免图片被覆盖)
2、保存在本地

UDP协议

基于UDP协议进行传输的过程,类似于发包裹
1、传输的类主要是:DatagramSocket(此类表示用来发送和接收数据报包的套接字)

构造方法

public DatagramSocket(int port,InetAddress laddr)
第一个参数端口号、第二个参数是地址

public DatagramSocket(int port)
参数是端口号

常规方法

发送数据包:send(DatagramPacket p)
接收数据包:receive(DatagramPacket p)

2、数据包类:DatagramPacket(包裹对象)

构造方法

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
传递的参数依次是:字节数组;从字节数组的什么地方开始;到哪里结束;获取的ip对象;端口号

DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)

方法

返回SocketAddress:SocketAddress getSocketAddress()
获取缓冲区的数据:byte[] getData()

客户端的步骤:(基于UDP的客户端)
1、实例化这个对象
2、构建一个数据包
3、发送数据
4、关闭资源

public class Ke {
    public static void main(String[] args) {
        try {
            DatagramSocket ds=new DatagramSocket();
            String str="长江长江,我是黄河";
            InetAddress inetAddress=InetAddress.getByName("localhost");
            DatagramPacket dp=new DatagramPacket(str.getBytes(),0,str.getBytes().length,inetAddress,8887);
            ds.send(dp);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}            

服务器的步骤:(基于UDP的服务器)
1、实例化这个对象DatagramSocket
2、构建一个包裹对象
3、接收数据 receive()
4、关闭资源

public class Ser {
    public static void main(String[] args) {
        try {
            DatagramSocket ds=new DatagramSocket(8887);
            byte[] b=new byte[1024];
            DatagramPacket dp=new DatagramPacket(b,b.length);
            ds.receive(dp);
            byte[] by=dp.getData();
            System.out.println(new String(by,0,by.length));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}            
开发使用的是第三方:环信与融云(sdk) tcp+udp 即时通信
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值