什么是网络编程
网络编程指的是,网络上的主机,不同的进程,通过网络的方式实现通信。同一个主机但是不同进程之间通信也是网络编程,但是我们主要编程对象是不同主机至今啊的通信。
网络编程实际上就是把传输层和应用层进行封装,然后利用java提供的api进行通过,代码的形式交给传输层然后进行通信。
网络编程的基本概念
客户端和服务器
- 客户端:发起通信的一方,实际上就是我们平时的应用之类的。
- 服务器:接受数据的一方,接收数据并进行处理。
客户端服务器的定义实际上是谁发起了通信,谁接受了数据。
请求和响应
请求:request,客户端给服务器发送的数据。
响应:response,服务器返回给客户端的数据。
Socket关键字
Socket是系统提供的方式用于网络通信,网络通信常常基于Socket关键字。
TCP和UDP是传输层的两个重要的协议。
TCP的特点
- 有连接(必须要双方都接通了才能进行通信,需要三次握手四次挥手)。
- 可靠传输(可以知道对方是否接收到了数据)。
- 面向字节流(网络中的传输数据是字节模式,以字节为单位)。
- 全双工(可以双向通信)。
UDP的特点
- 无连接(就是类似于QQ直接发出去,无需等待对方建立连接)。
- 不可靠传输(对方就算对方没有接收到,发送端也不知道有没有对方是否接收到)。
- 面向数据报(单位是数据报)。
- 全双工(可以双向通信)。
UDP编程:
1.DatagramSocket
Datagramsocket是UDP Socket的关键方法,用来发送和接受UDP数据。
构造方法:
重要方法:
2.DatagramPacket
DatagramPacket是UDP Socket发送数据的数据报(每次接收和发送数据的基本单位就是 数据报)。
构造方法:
3.UDP回显服务器
服务器和客户端都要指定一个端口号,但是一般服务器的端口号要显式指定,客户端不能显式指定,系统会自动分配。服务器需要把端口号明确下来,需要让别人找到。客户端的端口号不能指定,因为有可能被别人占用了(避免端口号冲突),交给系统分配。
服务器的端口号在程序员手里,服务器的哪些端口号被使用了,程序员都知道的。客户端在客户上面。一个服务器程序需要长时间运行。
new DatagramPacket()用来承载从网卡这边读到的数据,读到数据需要指定一个内存空间来保存这个数据。socket(网卡)读取数据,,并且保存到requestpacket里面。
receive会阻塞,直到客户端发送数据。
package network;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpEchoServer {
//服务器代码,创建一个DatagramSocket,后续操作网卡
private DatagramSocket socket=null;
public UdpEchoServer(int port) throws SocketException {
this.socket = new DatagramSocket(port);
//socket=new DatagramSocket();这是让系统分配的方法。
}
public void start() throws IOException {
while (true){
//读取请求并且解析
DatagramPacket requestPacket=new DatagramPacket(new byte[4096],4096);