概述

  • 用Java语言实现计算机间数据的信息传递和资源共享
  • 参考模型:
    OSI参考模型
    TCP/IP参考模型

网络编程三要素

IP地址:

  • 计算机的在网络中的标识

    • 点分十进制标识法:4个字节,每个字节采用一个十进制数据表示
  • IP地址的组成:网络号码+主机地址
  • IP地址的分类
  • dos命令:
    • ipconfig:查看本机ip地址
    • ping+本机IP地址:测试本机与指定IP地址的通信 ( 127.0.0.1 回环地址,可用于测试本机的网络是否有问题.)
  • InetAddress类:
    • 无构造方法,成员方法全部是静态(例如Math,Arrays,Collections)
    • 成员方法:
      获取任意主机:getByName
      主机名:getHostName
      主机Ip地址:getHostAddress

端口:

是应用程序的标识。
范围:0-65535。其中0~1024系统使用或保留端口。

协议:

  • UDP:数据打包,有限制,不连接,效率高,不可靠
    TCP:建立数据通道,无限制,效率低,可靠(三次握手)

Socket套接字:

  • 网络上具有唯一标识的 IP地址+端口号 组合在一起才能构成唯一能识别的标识符套接字。
  • 原理:
    通信的两端都有Socket。
    网络通信其实就是Socket间的通信。
    数据在两个Socket间通过IO传输。

UDP协议发送和接收数据

  • 发送:
    创建UDP发送端的Socket对象
    创建数据并把数据打包
    发送数据
    释放资源
// 创建发送端Socket对象
// DatagramSocket()
DatagramSocket ds = new DatagramSocket();
// 创建数据,并把数据打包
// DatagramPacket(byte[] buf, int length, InetAddress address, int port)
// 创建数据
byte[] bys = "hello,udp".getBytes();
// 长度
int length = bys.length;
// IP地址对象
InetAddress address = InetAddress.getByName("192.168.12.92");
// 端口
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, address, port);
// 调用Socket对象的发送方法发送数据包
// public void send(DatagramPacket p)
ds.send(dp);
// 释放资源
ds.close();
  • 接收:
    创建UDP接收端的Socket对象
    创建数据包用于接收数据
    接收数据
    解析数据包
    释放资源
// 创建接收端Socket对象
// DatagramSocket(int port)
DatagramSocket ds = new DatagramSocket(10086);
// 创建一个数据包(接收容器)
// DatagramPacket(byte[] buf, int length)
byte[] bys = new byte[1024];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length);
// 调用Socket对象的接收方法接收数据
// public void receive(DatagramPacket p)
ds.receive(dp); // 阻塞式
// 解析数据包,并显示在控制台
// 获取对方的ip
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData():获取数据缓冲区
// public int getLength():获取数据的实际长度
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys2, 0, len);
System.out.println(ip + "传递的数据是:" + s);
// 释放资源
ds.close();

TCP协议发送和接收数据

  • 发送:
    创建TCP客户端的Socket对象
    获取输出流,写数据
    释放资源
public static void main(String[] args) throws IOException {// 创建发送端的Socket对象// Socket(InetAddress address, int port)// Socket(String host, int port)// Socket s = new Socket(InetAddress.getByName("192.168.12.92"), 8888);Socket s = new Socket("192.168.12.92", 8888);// 获取输出流,写数据// public OutputStream getOutputStream()OutputStream os = s.getOutputStream();os.write("hello,tcp".getBytes());// 释放资源s.close();}
  • 接收:
    创建TCP服务器端的Socket对象
    监听客户端连接
    获取输入流,读取数据
    释放资源
public static void main(String[] args) throws IOException {// 创建接收端的Socket对象// ServerSocket(int port)ServerSocket ss = new ServerSocket(8888);// 监听客户端连接。返回一个对应的Socket对象// public Socket accept()Socket s = ss.accept(); // 侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。// 获取输入流,读取数据显示在控制台InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys); // 阻塞式方法String str = new String(bys, 0, len);String ip = s.getInetAddress().getHostAddress();System.out.println(ip + "---" + str);// 释放资源s.close();// ss.close(); //这个不应该关闭}

Java se:网络编程相关推荐

  1. Java SE 网络编程

    Java SE 网络编程 目录 Java SE 网络编程 1.计算机网络概念 2.网络通讯协议 2.2.通讯接口 3.网络分层 3.2.OSI七层协议|TCP/IP五层协议 3.3 . 封装 3.4. ...

  2. java集合到线程的考试_成都汇智动力-Java SE考试编程题总结

    原标题:成都汇智动力-Java SE考试编程题总结 线程和进程的区别: (1)进程是运行中的程序,拥有自己独立的内存空间和资源; (2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; ...

  3. JAVA SE 语言编程-杨千锋-专题视频课程

    JAVA SE 语言编程-3572人已学习 课程介绍         第一周: 内容包括,Java环境搭建,变量,数据类型,二进制,if/else,switch,for,while,do while等 ...

  4. Netty:Java 领域网络编程的王者

    一.简介 1. 课程背景 分布式系统的根基在于网络编程,而 Netty 是 Java 领域网络编程的王者. 2. 课程内容 第一部分 NIO 编程,三大组件 第二部分 Netty 入门学习,Event ...

  5. 你对Java网络编程了解的如何?Java BIO 网络编程 | Netty 前期知识

    一步一步走来,之前去学习了JUC并发编程知识,现在终于到Java IO网络编程啦,难啊. 一.BIO介绍 引入: 随着技术的发展,两个或以上的程序必然需要进行交互,于是提供了一种端到端的通信,相当于对 ...

  6. 四十六、深入Java的网络编程(下篇)

    @Author:Runsen @Date:2020/6/9 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  7. 四十五、深入Java的网络编程(上篇)

    @Author:Runsen @Date:2020/6/8 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...

  8. JAVA的网络编程【转】

    转自 http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能 ...

  9. java的网络编程有用吗_十大有用但又偏执的Java编程技术

    java的网络编程有用吗 经过一段时间的编码(以我为例,大约20年左右,当您玩得开心时光飞逝),人们开始接受这些习惯. 因为,你知道... 任何可能出错的事情都会发生. 这就是为什么人们会采用&quo ...

  10. java中no1_【Java】-- 网络编程のNo.1

    在现有的网络中,网络通讯的方式主要有两种: TCP(传输控制协议)方式 UDP(用户数据报协议)方式 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后 ...

最新文章

  1. 摄像头YUV图像常见数据格式介绍
  2. modelsim-win64-10.1c的安装和基本使用
  3. 您的手机上未安装应用程序 android 点击快捷方式提示未安装程序的解决
  4. 如何反序列化XML文档
  5. 如何在Linux使用Eclipse + CDT开发C/C++程序? (OS) (Linux) (C/C++) (gcc) (g++)
  6. python在线读-Python电子书免费分享
  7. eclipse openmp mpi并行编程例子
  8. Android 音频播放——AudioTrack直接播PCM、MediaPlayer播媒体文件可以是audio
  9. Qt学习(一):两个独立窗口的信号通信
  10. AXI_05 AXI_FULL_IP的设计与验证
  11. Tensorflow+gpu安装
  12. 计算机网络四个阶段的发展特点,计算机网络的发展分哪四个阶段,特点?
  13. mysql抽屉图标_React Native自定义组件实现抽屉菜单控件效果
  14. NOI2015 荷马史诗
  15. swift python 性能_Swift 性能探索和优化分析
  16. wps 项目进度_wps excle做甘特图|如何利用excel自动生成施工进度计划横道图
  17. 干货|java缓存技术详解
  18. 旧计算机 云桌面,切换桌面(云桌面切换到自己电脑)
  19. Cesium中文教程-空间数据可视化Visualizing Spatial Data(二)
  20. 【make】make常见问题

热门文章

  1. 网络流量大数据分析平台(2)
  2. 惊魂一小时:全国域名解析首遭大规模污染
  3. LeetCode刷题(37)~无重复字符的最长子串
  4. 信息安全——替换密码加密(使用Cryptool、物联网)
  5. 唐老院长振绪追悼会感言
  6. ubuntu如何配置软件更新源和更新镜像
  7. Python爬取15万条《我是余欢水》弹幕,还原一个丧到极致的中年人生
  8. ffmpeg视频播放过程
  9. windows的gitbash使用jq
  10. java程序员面试笔试宝典8.3排序