• 网络编程简单学习


    目录

    一、 概述

    1. 什么是计算机网络?

    2. 网络编程的目的

    3. 需要达到什么样的效果?

    二、 网络通信的两个要素

    1. 通信双方地址

    2. 规则:网络通信协议

    三、IP地址

    1. IP地址概述

    2. IP地址分类

    3. 域名

    四、端口

    五、通信协议

    六、TCP实现聊天 

    七、TCP文件上传实现

    八、Tomcat

    关于C/S与B/S的区别? 

     九、UDP

    1. UDP消息发送

     2. UDP聊天实现

    3. UDP实现多线程在线咨询

    十、URL下载网络资源


    一、 概述

    1. 什么是计算机网络

    计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统网络管理软件网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

    2. 网络编程的目的

    进行信息交换、数据交换、通信

    3. 需要达到什么样的效果?

    • 如何准确的定位网络上的一台(多台)主机
    • 找到了主机之后怎么进行数据传输?

    二、 网络通信的两个要素

    1. 通信双方地址

    ①IP

    ②端口号

    2. 规则:网络通信协议

    常见的协议:http、tcp、udp、ftp。。。

    三、IP地址

    1. IP地址概述

    唯一定位一台网络上计算机

    127.0.0.1:本地localhost

    2. IP地址分类

    • ipv4 / ipv6

            ipv4:127.0.0.1 四个字节,0-255,总共约42亿个

            ipv6: fe80::7c35:c70b:19ee:ba00%21   128位,8个无符号整数

    • 公网 / 私网

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

            ABCD类地址

    3. 域名

    域名的产生就是为了解决IP问题 

    四、端口

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

    • 不同的进程有不同的端口号,用来区分软件
    • 规定端口0-65535
    • UDP和TCP的端口均为0-65535
    • 端口分类:公有端口 0-1023(尽量不要使用)---- HTTP:80,https:443 ,ftp:21,Telent:23;常见的程序注册端口:1024-49151  分配给用户或者程序 ---- tomcat:8080,mysql:3306,Oracle:1521;动态端口:49152-65535 
    • 常见命令:netstat -ano(查看所有的端口);netstat -ano|findstr " "(查看指定端口);tasklist|findstr " " (查看指定端口的进程)

    五、通信协议

    协议:约定

    网络通信协议:速率、传输码率等等、

    TCP/IP协议簇:实际上是一组协议

    重要协议对比

    TCP:用户传输协议

    • 连接、稳定
    • 三次握手、四次挥手
    • 客户端、服务端
    • 传输完成、释放连接,效率低

    UDP:用户数据报协议

    • 不连接、不稳定
    • 客户端、服务端,但是没有明确的界限
    • 无论有没有准备好都可以发送,不论对方有没有准备好

    六、TCP实现聊天 

    客户端

    1. package study01;
    2. import java.io.IOException;
    3. import java.io.OutputStream;
    4. import java.net.InetAddress;
    5. import java.net.Socket;
    6. import java.net.UnknownHostException;
    7. import java.nio.charset.StandardCharsets;
    8. //客户端
    9. public class TcpClient {
    10. public static void main(String[] args) {
    11. Socket socket =null;
    12. OutputStream outputStream =null;
    13. try {
    14. // 1. 连接地址
    15. InetAddress serverIP = InetAddress.getByName("127.0.0.1");
    16. // 2. 创建端口号
    17. int port=9999;
    18. // 3. 创建一个socket连接
    19. socket = new Socket(serverIP,port);
    20. // 4. 发送消息
    21. outputStream = socket.getOutputStream();
    22. outputStream.write("你好".getBytes(StandardCharsets.UTF_8));
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. }finally {
    26. if(socket!=null){
    27. try {
    28. socket.close();
    29. } catch (IOException e) {
    30. e.printStackTrace();
    31. }
    32. }
    33. if(outputStream!=null){
    34. try {
    35. outputStream.close();
    36. } catch (IOException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. }
    41. }
    42. }

    服务端

    1. package study01;
    2. import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
    3. import java.io.ByteArrayOutputStream;
    4. import java.io.IOException;
    5. import java.io.InputStream;
    6. import java.net.ServerSocket;
    7. import java.net.Socket;
    8. //服务端
    9. public class TcpService {
    10. public static void main(String[] args) {
    11. ServerSocket serverSocket =null;
    12. Socket accept = null;
    13. InputStream is = null;
    14. ByteArrayOutputStream baos=null;
    15. //1. 需要创建一个地址给客户端进行连接,使用套接字,然后客户端可以通过9999连接服务端
    16. try {
    17. serverSocket = new ServerSocket(9999);
    18. //2. 等待客户端的连接
    19. accept = serverSocket.accept();//此时这里的socket就是客户端的socket
    20. //3. 读取客户端的信息
    21. is = accept.getInputStream();
    22. /*
    23. * 使用管道流
    24. * */
    25. baos=new ByteArrayOutputStream();
    26. byte[] buffer=new byte[1024];
    27. int len;
    28. if((len=is.read(buffer))!=-1){
    29. baos.write(buffer,0,len);
    30. }
    31. System.out.println(buffer.toString());
    32. } catch (IOException e) {
    33. e.printStackTrace();
    34. }finally {
    35. //关闭资源
    36. if(serverSocket!=null){
    37. try {
    38. serverSocket.close();
    39. } catch (IOException e) {
    40. e.printStackTrace();
    41. }
    42. }
    43. if(accept!=null){
    44. try {
    45. accept.close();
    46. } catch (IOException e) {
    47. e.printStackTrace();
    48. }
    49. }
    50. if(is!=null){
    51. try {
    52. is.close();
    53. } catch (IOException e) {
    54. e.printStackTrace();
    55. }
    56. }
    57. if(baos!=null){
    58. try {
    59. baos.close();
    60. } catch (IOException e) {
    61. e.printStackTrace();
    62. }
    63. }
    64. }
    65. }
    66. }

    七、TCP文件上传实现

    客户端

    服务端

    八、Tomcat

    服务端

    • 自定义 S
    • tomcat作为服务端 S:Java后台开发

    客户端

    • 自定义 C
    • 浏览器作为客户端 B

    关于C/S与B/S的区别? 

     九、UDP

    1. UDP消息发送

    发送端

     【补充:最后需要关闭流】

    单纯只有客户端的话是不能连接成功的!会出现错误,所以其实是还是要有一个服务端接收消息,但是客户端并不用像TCP里面一样等待连接建立成功才可以! 

    接收端

     2. UDP聊天实现

    发送端

    接收端

    3. UDP实现多线程在线咨询

    发送端线程

     接收端线程

     学生端

    老师端

    十、URL下载网络资源

    URL:统一资源定位符

     

     前提是tomcat是开启的

     这样就可以了,同样我们可以使用这个方式去网上爬取资源,比如收费歌曲等等!!!

    =========================================================================

    好了,最近找到工作后就有些懈怠了,现在需要重新抓起来了!!!加油哇,各位!

  • 相关阅读:
    数据库连接池的使用
    Spring框架系列(6) - Spring IOC实现原理详解之IOC体系结构设计
    第6章:6.1 文本格式化 (MATLAB入门课程)
    k8s集群搭建(ubuntu 20.04 + k8s 1.28.3 + calico + containerd1.7.8)
    【Jenkins】win 10 / win 11:Jenkins 服务登录凭据配置
    python 获取某个字符指定字符的前面、后面和中间的字符
    下载免费的ip+构建ip地址池访问网站详细教程
    数据服务安全的重要性
    MySQL的存储引擎和索引
    YOLOv5s-ShuffleNetV2
  • 原文地址:https://blog.csdn.net/young_man2/article/details/127965232