Java学习17 网络编程

网络基础

计算机网络

主要功能:
1. 资源共享
2. 信息传输与集中处理
3. 均衡负荷与分布处理
4. 综合信息服务

网络分类:
1. 局域网,LAN,local area network
2. 城域网,MAN,metropolitan arem network
3. 广域网,WAN,wide area network

拓扑(Topology):
1. 环形网
2. 星形网
3. 总线型网

传输介质:
1. 双绞线网
2. 同轴电缆网
3. 光纤网
4. 卫星网

信号频带带宽:
1. 基带网(10k)
2. 宽带网

网络工作模式
1. 专用服务器结构(Server-Based),工作站/文件服务器
2. 客户机/服务器模式(Client/Server,C/S)
3. 对等式网络(Peer-to-Peer,P2P)

网络通讯协议

  • 分层:由于节点之间联系复杂,在制定协议时,把复杂的成分分解成一些简单的成分,然后复合起来。最常用的复合方式是分层,即:同层间可以通信;上一层可调用下一层,但与再下一层不发生关系
    • 物理层
    • 数据链路层
    • 网络层
    • 传输层
    • 会话层
    • 表示层
    • 应用层
  • 最高层:用户应用程序
  • 最底层:物理通信线路

  • 常用网络通信协议:

    • TCP/IP协议:TCP(Transmission Control Protocol,传输控制协议),IP(Internet Protocol,网际协议)
    • HTTP协议:HTTP(Hypertext Transfer Protocol,超文本传输协议)
    • FTP协议:FTP (File Transfer Protocol,文件传输协议)
    • SMTP协议:SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)
    • POP3/IMAP协议:POP3(Post Office Protocol - Version 3,邮局协议版本3),IMAP(Internet Message Access Protocol,Iternet消息访问协议)

IP地址/域名/端口

  • IP地址
  • 域名(Domain Address):由域名服务器(DNS, Domain Name Server)解析为对应IP地址
  • 端口(Port):取值0~65535

  • 相关API:

    • java.net.InetAddress
      32位或128位无符号数字表示的IP地址
    • java.net.Inet4Address
      InetAddress的子类,IPv4地址。
    • java.net.Inet6Address
      InetAddress的子类,IPv6地址。

URL

Uniform Resource Locator,统一资源定位器。
默认通讯端口:80

  • java.net包定义了URL类:

    public URL(String spec);
    public final InputStream openStream() throws IOException;

    openStream():打开到此URL的连接,并返回一个用于从该连接读入的InputStream

  • 代理服务器:
    设置系统参数:http.proxyHost``http.proxyPort

java -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=11080 URLReader

Socket编程

Socket:套件字,两个进程实现数据交换的一个双向网络通信连接链路的端点。

  • Socket通常用来实现Client-Server连接。
  • 寻址:机器名/IP地址 + 端口号
  • java.net包定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端。(沿用流式IO模型
    • ServerSocket:
      调用accept()方法等待连接;若没有连接,服务端阻塞。连接后返回socket对象,可以打开连接到Socket的IO流,进行数据读写操作;通信结束后关闭打开的IO流和socket(调用close()方法);
    • Socket:连接server端进行IO读写操作,通信结束后关闭打开的IO流和socket。

NIO非阻塞式Socket通信

  • 非阻塞式I/O
    • 避免read()/readLine()等IO操作的阻塞方法
    • 主要涉及选择器Selector通道Channel的使用
    • 举例:多用户聊天室

你可能感兴趣的:(java)