JavaSocket网络编程一

    xiaoxiao2021-03-25  20

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务端的沟通变成了现实,而在网络编程中,使用最多的就是Socket。像大家熟悉的QQ,MSN都使用了Socket相关技术.

    Socket编程

    一、网络基础知识(参考计算机网络)

    1、两台计算机间进行通讯需要以下三个条件: IP地址、协议、端口号 2、TCP/IP协议: 是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次上多个协议的集合,也成TCP/IP协议族、或TCP/IP协议栈 TCP:Transmission Control Protocol 传输控制协议 IP:Internet Protocol 互联网协议 3、TCP/IP五层模型 应用层:HTTP、FTP、SMTP、Telnet等 传输层:TCP/IP 网络层: 数据链路层: 物理层:网线、双绞线、网卡等 4、IP地址 为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的标识—IP地址。 32位二进制 5、端口 区分一台主机的多个不同应用程序,端口号范围为0-65535,其中0-1023位为系统保留。 如:HTTP:80 FTP:21 Telnet:23 IP地址+端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链路的终结点,是TCP和UDP的基础 6、Socket套接字: 网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识符套接字。 Socket原理机制: 通信的两端都有Socket 网络通信其实就是Socket间的通信 数据在两个Socket间通过IO传输 7、Java中的网络支持 针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类: InetAddress:用于标识网络上的硬件资源,主要是IP地址 URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据 Sockets:使用TCP协议实现的网络通信Socket相关的类 Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。

    二、InetAddress InetAddress类用于标识网络上的硬件资源,标识互联网协议(IP)地址。 该类没有构造方法

    import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; /* * InetAddress类 */ public class Test01 { public static void main(String[] args) throws UnknownHostException { // 获取本机的InetAddress实例 InetAddress address = InetAddress.getLocalHost(); System.out.println("计算名:" + address.getHostName()); System.out.println("IP地址:" + address.getHostAddress()); byte[] bytes = address.getAddress();// 获取字节数组形式的IP地址 System.out.println("字节数组形式的IP:" + Arrays.toString(bytes)); System.out.println(address);// 直接输出InetAddress对象 // 根据机器名获取InetAddress实例 // InetAddress address2=InetAddress.getByName("laurenyang"); InetAddress address2 = InetAddress.getByName("1.1.1.10"); System.out.println("计算名:" + address2.getHostName()); System.out.println("IP地址:" + address2.getHostAddress()); } }

    控制台打印:

    计算名:chunchunhudell** IP地址:169.254.119.** 字节数组形式的IP:[-87, -2, 119, **] chunchunhudell**/169.254.119.** 计算名:1.1.1.** IP地址:1.1.1.**

    三、URL类 1、URL(Uniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址,协议名:资源名称

    import java.net.MalformedURLException; import java.net.URL; /* * URL常用方法 */ public class Test02 { public static void main(String[] args) { try { //创建一个URL实例 URL imooc=new URL("http://www.imooc.com"); //?后面表示参数,#后面表示锚点 URL url=new URL(imooc, "/index.html?username=tom#test"); System.out.println("协议:"+url.getProtocol()); System.out.println("主机:"+url.getHost()); //如果未指定端口号,则使用默认的端口号,此时getPort()方法返回值为-1 System.out.println("端口:"+url.getPort()); 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(); } } }

    打印台输入:

    协议:http 主机:www.imooc.com 端口:-1 文件路径:/index.html 文件名:/index.html?username=tom 相对路径:test 查询字符串:username=tom

    2、使用URL读取网页内容 通过URL对象的openStream()方法可以得到指定资源的输入流,通过流能够读取或访问网页上的资源

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; /* * 使用URL读取网页内容 */ 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(); } } }

    控制台打印: http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>百度一下,你就知道

    http://news.baidu.com name=tj_trnews class=mnav>新闻 http://www.hao123.com name=tj_trhao123 class=mnav>hao123 http://map.baidu.com name=tj_trmap class=mnav>地图 http://v.baidu.com name=tj_trvideo class=mnav>视频 http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧 http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http://www.baidu.com/?bdorz_come=1 name=tj_login class=lb>登录 更多产品

    http://home.baidu.com>关于百度 http://ir.baidu.com>About Baidu

    ©2017 Baidu http://www.baidu.com/duty/>使用百度前必读  http://jianyi.baidu.com/ class=cp-feedback>意见反馈 京ICP证030173号 

    以上是Socket的基础知识,分享给大家!

    这是我的公众号,关注二维码,会有更过博文,能助力你提高互联网思维提升,有什么问题,我们一起交流.

    转载请注明原文地址: https://ju.6miu.com/read-50384.html

    最新回复(0)