网络编程

1、网络编程的基础知识
——网络协议与TCP/IP
——IP地址和Port(端口号)
         ——本地回路地址:(127.0.0.1)
(发送到127.0.0.1的数据,不经过网卡,被TCP/IP的上层协议接收的)
         ——端口号范围为0~65535之间,,0~1023之间的端口是用于一些知名的网络服务和应用。
——UDP和TCP
  TCP:传输控制协议(Transmission  Control Protocol) 面向连接的通信协议
  UDP:用户数据包协议(User Datagram Protocol)是无线连接的通信协议
TCP/UDP数据帧格式:
    协议类型/源IP/目的IP/源端口/目标端口/帧序号/帧数据
      (其中协议类型用于区分TCP.UDP)
Socket
1、Socket是网络驱动层提供给应用程序编程的接口的一种机制
2、Socket在应用程序中创建的通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port

Java中的网络编程类
1、位于java.net包中
2、DatagramSocket类用于UDP通信
3、ServerSocket类用于TCP通信的服务器
4、Socket类用于TCP通信服务器和客户端

UDP网络程序
1、DatagramSocket类
构造函数:
——public DatagramSocket()
——public DatagramSocket(int port)
——public DatagramSocket(int port,InetAddress laddr)
close()方法:当应用程序不再用DatagramSocket时,应调用Close方法
send(DatagramSocket p)方法      //发送UDP数据包
receive(DatagramSocket)方法     //接收UDP数据包
如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和就收数据的集装箱。
InetAddress类
InetAddress是用于表示计算机IP地址的一个类

TCP网络程序
1、TCP客户端程序与TCP服务器程序的交互过程
——服务器创建一个ServerSocket,然后调用accept()方法等待客户端来连接。
——客户端创建一个Socket并请求与服务器建立连接
——服务器接受客户的连接请求,并创建一个新的Socket与该客户建立专线连接
——建立了连接的两个Socket在一个单独的线程(由服务器程序创建)上对话
——服务器开始等待新的连接请求,当新的连接请求到达时,重复步骤2到步骤5的过程。

ServerSocket
构造函数:
——public ServerSocket()
——public ServerSocket(int port)
——public ServerSocket(int port,int backlog)
——public ServerSocket(int port,int backlog,InerAddress bindAddr)
Socket类
构造函数
——public Socket()
——public Socket(String host,int port)
——public Socket(Inetaddress address,int port)

完善的TCP服务器程序模型
TCP服务器程序模型的编写特点:
1、TCP服务器要想能接收多个客户端,需要循环调用ServerSocket.accept()方法
2、服务器程序与每个客户端连接的会话过程互不能影响,需在独立的线程中运行
3、一个线程服务器对象与一个服务器Socket对象相关联,共同来完成与一个客户端的会话。

如何检测和解决端口冲突问题:
1、使用netstat命令查看当前正在被使用的TCP端口号
2、通过一个配置参数类指定TCP服务器程序所使用的端口号
3、将用户所指定的端口号保存到一个文件中,当服务器程序下次启动运行时,直接从文件中读取那个端

口号。
TCP客户端程序
1、ObjectInputStream和ObjectOutputStream可以从底层输入流中读取对象类型的数据和将对象类型的数

据,写出到底层输出流
2、使用ObjectInputStream和ObjectOutputStream类包装类底层网络字节流,TCP服务器和TCP客户端之间

就可以传递对象类型的数据。

URL(Uniform Resource Locator)
URL的基本组成:协议、主机名、端口号、资源名
URL的编码规则:
——将空格号转换为加好(+)
——对于0—9、a—z、A—Z之间的字符保持不变
——对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制式表示,并在每个字节前加

一个百分号(%).如字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示。每个中文字符在内

存中占两个字节。
——对于空格也可以直接使用十六进制表示,即用%2O表示,而不是将它转换成加好(+)
——java.net包中提供了URLEncode和URLDecoder这两个类来实现URL编码和解码。

HTTP协议的请求消息
一个完整的请求消息包括:
   一个请求行,若干个消息头,以及实体内容
一个完整的响应消息包括:
   一个状态行,若干个消息头,以及实体内容

了解N个HTTP消息头
1、Connection
用于指定处理本次请求/响应后,客户端与服务器是否继续保持连接,设置值可以为keep-Alive和close
2、Accept-language
用于指出客户机期望服务器返回的文档所使用的国家言语,可以指定多个以逗号分隔的国家语言。
3、Content—length
用于表示实体内容的长度(字节数)
4、Range
用于指定服务器只需返回文档中的部分内容及范围。
5、Content—Range
用于指定服务器返回的部分实体内容的位置信息。

URL类
构造函数(都可引发MalformedURLException异常)
——public URL(String spec)
——public URL(String protocol,String host,int port,String file)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值