java基础整理12--网络编程

网络编程的基础知识:

 IP地址和Port(端口号)

  本地回路的IP地址:127.0.0.1

  端口号的范围为0~65535之间,0~1023之间的端口数是用于一些知名的网络服务和应用。

UDPTCP:

 TCP,传输控制协议(Transmission Control Protocol),是面向连接的通信协议。

 UDP,用户数据报协议(User Datagram Protocol),是无连接通信协议。

Socket

   Socket是网络驱动层提供给应用程序编程的接口和一种机制。

   可以把Socket比喻成是一个港口码头。应用程序只要把货物放到港口码头上,就算完成了货物的运送。应用程序只需等待货物到达码头后,将货物取走。

   Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IPPort

Java中的网络编程类:

  位于java.net包中。

  DatagramSocket类用于UDP通信。

  ServerSocket类用于TCP通信的服务器端。

  Socket类用于TCP通信的服务器和客户端。

UDP网络程序:

  DatagramSocket类:

构造函数:

 public DatagramSocket()

 public DatagramSocketint port

     public DatagramSocketint portInetAddress laddr

Close方法:

sendDatagramPacket p)方法

receiveDatagramPacket p)方法

 

DatagramPacket类:

如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。

 构造函数:

  public DatagramPacketbyte[] buf,int length

  public DatagramPacketbyte[] buf,int length,InetAddress address,int port

getInetAddressgetPort方法

getDatagetLength方法

InetAddress类:

 InetAddress是用于计算机IP地址的一个类,而在日常应用中的计算机地址是用“192.168.0.1”、“www.it315.org”等字符串格式来表示的。

getByName方法

getHostAddress方法

最简单的UDP程序:

 字符串与字节数组之间的双向转换。

 UDP接收程序必须先启动运行,才能接收UDP发送程序发送的数据。

 用start命令来打开新命令行窗口的好处。

 解决发送中文字符串的问题。

 

TCP服务器程序模型的编写要点:

TCP服务器程序要想能够接收多个客户端连接,需要循环调用ServerSocket.accept方法。

服务器程序与每个客户端连接的会话过程不能互相影响,需要在独立的线程中运行。

一个线程服务对象与一个服务器端Socket对象相关联,共同来完成与一个客户端的会话。

 如何检测和解决端口冲突问题:

    使用netstat命令查看当前正在被使用的TCP端口号。

    通过一个配置参数来指定TCP服务程序所使用的端口号。

    将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端口号。

TCP客户端程序:

 编程实例:编写一个与上面的服务器程序通信的客户端程序。

 要点:连接服务器的IP地址和端口号不要固定编写在程序代码中,而是通过程序的运行时参数来指定,以提供较好的灵活性和较高的通用性。

TCP网络连接上传递对象:

 ObjectInputStreamObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数据写入到底层输出流。

 使用ObjectInputStreamObjectOutputStream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对象类型的数据。

URLUniform Resource Locator统一资源定位符):

 URL的基本组成:协议、主机名、端口名、资源名。

   例如:http://www.it315.org:8080/index.html

 相对URL,例如"/a.html""./a.html""../../a.html""a.html"

 URL编码规则:

   将空格转化为加号(+)。

   对0~9a-z,A-Z之间的字符保持不变。

   对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每个字节前加上一个百分号(%)。如字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占用两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示。

   对于空格也可以直接使用其十六进制编码方式,即用%20表示,而不是将它转换成加号(+)。

 java.net包中提供了URLEncoderURLDecoder这两个类,来实现URL编码和解码。

了解几个HTTP消息头:

 Connection

   用于指定处理完本次请求/响应后,客户端与服务器是否继续保持连接。设置值可以为Keep-Aliveclose

 Accept-Language

   用于指出客户机期望服务器返回的文档所使用的国家语言,可以指定多个以逗号分隔的国家语言。

 Content-Length

  用于表示实体内容的长度(字节数)

 Range

  用于指定服务器只需返回文档中的部分内容及内容范围,有以下几种使用格式:

  1Rangebytes=100-599

  2Rangebytes=100-

  3Rangebytes=-100

 Content-Range:

   用于指定服务器返回的部分实体内容的位置信息,

   例如,Content-Rangebytes 2543-4532/7898

URL类:

  构造函数(都可以引发MalformedURLException异常):

   public URLString spec

   public URLString protocolString hostint portString file

   public URLString protocolString hostint portString fileURLStreamHandler handler) 

   public URLURL context,String spec

  getProtocolgetHostgetPortgetFile等方法。

  openConnection方法返回URLConnection对象。

工厂设计模式:

 URL类的setURLStreamHandlerFactoryURLStreamHandlerFactory fac)静态方法。

 StreamHandlerFactory类的createURLStreamHandlerString protocol)方法。

 

 URLConnectionHttpURLConnection类:

 URLConnectionHttpURLConnection的作用。

 URLConnection的连续过程。

 setRequestProperty方法。

 getHeaderFields方法。

 getInputStreamgetOutputStream方法。

 getHeaderFieldgetContentLengthgetContentEncodinggetContentType等方法。

一个HTTP连接可以被多个HttpURLConnection实例对象共享,调用HttpURLConnectiondisconnect方法可以关闭底层共享网络。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值