【Java】Socket入门 [一]

来源:互联网 发布:matlab mac版安装教程 编辑:程序博客网 时间:2024/05/22 06:44

前言:

两台计算机通过网络进行通讯

1、两台主机有唯一标识——IP地址

2、需要共同的“语言”——协议

3、一台主机上可以运行多个程序,区分程序——端口

一、TCP/IP是目前世界上应用最为广泛的协议,是以TCPIP为基础的不同层次上多个协议的集合,也称:TCP/IP协议族 或 TCP/IP协议线

TCPTransmission Control Protocol 传输控制协议

IPInternet Protocol 互联网协议

TCP/IP的五层层次模型

5、应用层(用户直接接触:HTTPFTPSMTPTelnet

4、传输层TCP/IP

3、网络层

2、数据链路层

1、物理层(网线、网卡……)

 

IP地址:

IPV4版本:32位二进制  例192.168.0.1

▲端口:

1、用于辨识不同应用程序

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

3、IP地址和端口号组成了所谓的SocketSocket是网络上运行的程序之间双向通信链路的终结点,是TCPUDP的基础

4、常见协议使用的端口号:http80  ftp21Telnet23

二、Java上的网络支持

InetAddress:用于标识网络上的硬件资源(IP地址)

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

Sockets:使用TCP协议实现网络通信的Socket

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

1、InetAddress

没有构造方法

public class Test {public static void main(String[] arg) throws UnknownHostException{//获取本机InetAddressInetAddress 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对象//根据机器名获取InetAddressInetAddress address2 = InetAddress.getByName("dell");//根据IP地址获取InetAddress address3 = InetAddress.getByName("172.20.1.5");}


2、URL

URLUniform Resource Locator)统一资源定位符,表示Internet上某一资源的地址;

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

▲在java.net中提供了URL类来表示URL

 

public static void main(String[] args) {// TODO Auto-generated method stubtry {//创建一个URLURL myUrl = new URL("http://blog.csdn.net/a565815942/article/details/50838129");System.out.println("协议:"+myUrl.getProtocol());System.out.println("主机:"+myUrl.getHost());System.out.println("端口:"+myUrl.getPort());//如果未指定端口号,则使用默认,返回-1System.out.println("文件路径:"+myUrl.getPath());System.out.println("文件名:"+myUrl.getFile());System.out.println("相对路径:"+myUrl.getRef());System.out.println("查询字符串:"+myUrl.getQuery());} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

3、使用URL读取网页内容

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

通过输入流可以读取、访问网络上的数据

public static void main(String[] args) {try {URL url = new URL("http://www.baidu.com");//获取URL表示的资源的字节输入流InputStream is = url.openStream();//将字节输入流转换成字符输入流InputStreamReader isr = new InputStreamReader(is);//为字符输入流添加缓冲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) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}


0 0
原创粉丝点击