今天既然我们学习Java的Socket网络通信编程,那么在我们的现实生活中那些是Socket编程的应用呢?可以想象

我们最常用的聊天工具软件QQ就是,当然MSN也是啦。

一网络基础知识

两台计算机通过网络进行通信的必要条件:

1)IP地址

2)网络协议

3)端口号

两台计算机网络通信示意图:

(1)TCP/IP协议

1)TCP/IP协议是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也称

TCP/IP协议族或TCP/IP协议栈。

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

3)IP:Internet Protocol(互联网协议)

(2)TCP/IP模型

TCP/IP模型示意图:

1)应用层(最高层,HTTP协议表示超文本传输协议,FTP协议表示文件传输协议,SMTP协议表示简单邮件传送协

议,Telnet协议表示远程登录服务)。

2)传输层(TCP/IP协议),TCP和UDP属于传输层。这就是我们程序员编程的一层。

3)网络层IP协议是属于网络层

4)数据链路层

5)物理层(网线,双绞线,网卡)

(3)IP地址

1)为实现网络中不同计算机之间的通信,每台机器都必须有一个唯一的标识——IP地址。

2)IP地址格式:数字型,如:192.168.0.1(Ipv4)。

想要深入了解的可以看我的这篇文章:IP地址的规划和设计方法(一)。

(4)端口

1)用于区分不同的应用程序。

2)端口号范围为0~65535,其中0~1023为系统所保留。

3)IP地址和端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP

的基础。

4)HTTP协议使用80端口,FTP协议使用21端口,SMTP协议使用25端口,POP3协议使110端口, telnet协议使

用110端口。

(5)Java中的网络支持

针对网络通信的不同层次,Java提供的网络功能有四大类:

1)InetAddress类:用于标识网络上的硬件资源。

2)URL类:统一资源定位符,通过URL可以直接读取或写入网络上的数据。

3)Sockets类:使用TCP协议实现网络通信的Socket相关的类。

4)Datagram类:使用UDP协议,将数据保存在数据报中,通过网络进行通信。

二Java中的InetAddress类的应用

(1)InetAddress类

1)InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。

2)java.net.InetAddress类表示互联网协议(IP)地址。

InetAddress类中的方法:

先行查看自己的计算机名称和自己的计算机IP地址。

实例代码:

<span style="font-size:18px;">import java.net.*;
import java.util.*;public class Test01{public static void main(String[] args) throws UnknownHostException{System.out.println("--------根据本地主机获取InetAddress实例-----------");//获取本机的InetAddress实例InetAddress address1 = InetAddress.getLocalHost();//直接输出InetAddress对象System.out.println(address1);//输出结果System.out.println("计算机名称:"+address1.getHostName());System.out.println("IP地址:"+address1.getHostAddress());//获取字节数组形式的IP地址byte[] bytes = address1.getAddress();System.out.println("字节数组形式的IP地址:"+Arrays.toString(bytes));System.out.println("--------根据主机名获取InetAddress实例-----------");//根据主机名获取InetAddress实例InetAddress address2 = InetAddress.getByName("HTACLW0UOMUIZKE");//直接输出InetAddress对象System.out.println(address2);System.out.println("计算机名称:"+address2.getHostName());System.out.println("IP地址:"+address2.getHostAddress());System.out.println("--------根据IP地址获取InetAddress实例-----------");//根据IP地址获取InetAddress实例InetAddress address3 = InetAddress.getByName("192.168.0.109");//直接输出InetAddress对象System.out.println(address3);System.out.println("计算机名称:"+address3.getHostName());System.out.println("IP地址:"+address3.getHostAddress());}
}</span>

运行结果:

(2)URL

1)URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址。URL类代表一个统一资源定

位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数

据库或搜索引擎的查询。比如:www.imooc.com。

2)URL由两部分组成:协议名称和资源名称,中间用冒号隔开。

比如:http://www.imooc.com/video/2858
                 协议名称                资源名称

3)在java.net包中,提供了URL类来表示URL。

URL类中的构造方法:

URL类中的方法:

实例代码:

<span style="font-size:18px;">import java.net.*;
import java.util.*;/**URL常用方法
*/
public class Test02{public static void main(String[] args){     try{//创建一个URL实例URL imooc = new URL("http://www.imooc.com");//根据已存在的imooc实例创建一个新的URL实例//?后面表示参数//#后面表示锚点URL url = new URL(imooc,"/index.html?username=tom#test");System.out.println("协议:"+url.getProtocol());System.out.println("主机:"+url.getHost());//如果URL实例未指定端口号,则使用默认的端口号,此时getPort()方法返回值为-1System.out.println("端口:"+url.getPort());//返回默认端口号System.out.println("端口:"+url.getDefaultPort());System.out.println("文件路径:"+url.getPath());System.out.println("文件名:"+url.getFile());System.out.println("相对路径:"+url.getRef());System.out.println("查询字符串:"+url.getQuery());}catch(MalformedURLException e){e.printStackTrace();} }
}</span>

运行结果:

(3)使用URL读取网页内容

1)通过URL对象的openStream()方法可以得到指定资源的输入流。

2)通过输入流可以读取,访问网络上的数据。

实例代码:

<span style="font-size:18px;">import java.net.*;
import java.io.*;public class Test03{public static void main(String[] args){try{//创建一个URL实例URL url = new URL("http://www.baidu.com");//通过URL的openStream()方法获取URL对象所表示的资源的字节输入流InputStream is = url.openStream();//将字节输入流转换为字符输入流InputStreamReader isr = new InputStreamReader(is,"utf-8");//为字符输入流添加缓冲BufferedReader br = new BufferedReader(isr);//读取数据String data = br.readLine();//循环读取数据while(data!=null){//输出数据System.out.println(data);data = br.readLine(); }br.close();isr.close();is.close();}catch(MalformedURLException e){e.printStackTrace();}catch(IOException e){e.printStackTrace();} }
}</span>

运行结果:

将读取的内容复制到一个html文件中,再用浏览器运行,会得到百度首页。

JavaSE入门学习47:Socket网络通信编程(一)相关推荐

  1. JavaSE入门学习51:多线程编程(二)

    二Java多线程 (4)线程的状态 线程状态转换示意图: 线程控制的基本方法: 1)sleep()方法 可以调用Thread的静态方法: public static void sleep(long m ...

  2. JavaSE入门学习50:多线程编程(一)

    一进程和线程 (1)进程和线程的基本概念 进程:程序(任务)的执行过程:持有资源(共享内存,共享文件)和线程. 线程:是一个程序内部的顺序控制流. 我们生活中的进程例子很多,一个进程就相当于一个你在电 ...

  3. UE4入门学习4:C++编程介绍

    - - 文章 UE4入门学习4:C++编程介绍 作者 游蓝海( http://blog.csdn.net/you_lan_hai ) UE4直接使用C++作为逻辑层语言,这样引擎层与逻辑层语言统一,不 ...

  4. Linux学习之----socket网络编程基础

    分层模型 OSI七层模型 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后再转 ...

  5. c#学习之Socket网络编程

    我是新手以前没写过博客 希望大家勿喷, 在编写Socket的时候需要导入System.Net.Socket 命名空间.利用该类我们可以直接编写Socket的客户端和服务的的程序了, 这里我们只讲tpc ...

  6. JavaSE入门学习1:计算机基础知识

    一计算机概述 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化 智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形 ...

  7. 零基础入门学习Python(35)面向对象编程

    self是什么? Python的self相当于C++的this指针 由同一个类可以生成无数对象,当一个对象的方法被调用的时候,对象会将自身的引用作为第一个参数传给该方法,Python就知道要操作哪个对 ...

  8. JavaSE入门学习38:Java集合框架之迭代器

    一Iterator接口 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层 结构.迭代器通常被称为"轻量级"对象,因为创建它的代价小 ...

  9. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

最新文章

  1. svn import无法上传库文件lib.a
  2. python3 基本数据类型
  3. 修改jar中的class文件
  4. 用计算机探索,学生计算机基础的应用探索
  5. Jenkins+Maven+SVN快速搭建持续集成环境(转)
  6. leangoo如何邀请成员加入看板?
  7. 闭式系统蒸汽管径推荐速度_暖通丨空调水系统的设计
  8. android定时器课程设计,定时器课程设计.doc
  9. CSS3渐变——线性渐变
  10. [转]浅谈算法和数据结构: 八 平衡查找树之2-3树
  11. OkHttpClient源码分析(四)—— CacheInterceptor
  12. 5G技术将如何改变我们的世界
  13. (二)以太网与WiFi协议
  14. “舌战群儒”的技术分析
  15. 安卓手机传感器采集数据并保存数据
  16. Excel条件格式使用小总结
  17. 求助:如何实现EA自动判断趋势,寻找高低点,并获取高低点K线价格数据,然后根据价格画出支撑阻力区域.
  18. 2021-11-25 统计学-基于R(第四版)第八章课后习题记录及总结
  19. 湖西大学计算机专业排名,韩国留学热门的30个专业
  20. SDN入门第五篇——交换机与控制器之间的交互流程

热门文章

  1. Mysql_复制表结构与内容到另一个新表
  2. 批处理程序XCOPY命令只拷贝当天文件的实现代码
  3. React中如何使用ref
  4. 控制面板里打印服务器显示叹号,Windows7打印图标显示叹号无法打印,怎么办?请按照以下步骤操作...
  5. CF817F MEX Queries(线段树上二分)
  6. 用c++实现对空调类的编写(教材题目)
  7. GitLab修改群组信息
  8. 将Ubuntu安装在U盘上,实现即插即用
  9. LCN分布式事务框架解决分布式事务一致性问题
  10. 盘点史上十大最昂贵的笔记本电脑