Timer 定时器
方法:
cancel() ----------------终止此计时器,如果再次调度已经终止的定时器会报错
purge()------------------删除所有取消的任务
TimerTask ---------------定时器任务 是抽象类 需要重写run方法
schedule(TimerTask task, long delay,long period)----------在指定的时间安排指定的任务执行
schedule (TimerTask task, Date firstTime, long period)- 从指定 的时间开始 ,对指定的任务执行重复的 固定延迟执行 。
网络编程三要素
-
IP
-
端口
应用程序在设备的唯一标识 端口号:取值范围 0~65535 自己用一般用1023以上端口 一个端口只能被一应用程序使用
-
协议
InetAddress
方法
static InetAddress getLocalHost() 返回本地主机的地址
static InetAddress getByName(String host) 确定主机名称的IP地址。
String getHostAddress() 返回文本显示中的IP地址字符串。
InetAddress address = InetAddress.getByName("LAPTOP-I9LAAE");
String ip = address.getHostAddress();
String hostName = address.getHostName();
UUID
UUID.randomUUID()// 随机生成唯一标识符
两个协议
TCP: 面向连接的协议
优点:可靠,能确保数据的完整性,链接后无大小限制
缺点:需要链接时间
UDP:无连接的协议
优点:速度快
缺点:不安全,不能确保数据的完整性,有大小限制,每个数据报在64KB之内
ServerSocket 服务器端
构造方法:
ServerSocket(int port) ------------创建绑定指定端口
方法:
accept() 如果没有收到客户端请求就阻塞,一旦有了客户端请求,方法返回 socket对象来和客户端建立连接
close() 关闭此套接字
getInetAddress() 返回此服务器套接字的本地地址。
getInetAddress().getHostAddress() 返回IP地址字符串
getInetAddress().getHostName() 返回主机名
Socket 客户端
构造方法:
Socket(InetAddress address, int port) ----------连接到指定IP地址的指定端口号
方法:
close() ---------------关闭此套接字。
getInputStream() ------返回此套接字的输入流。
getOutputStream() -----返回此套接字的输出流。
DatagramSocket
构造方法
DatagramSocket ds=new DatagramSocket (8080) 在UDP端口8888上接收广播。
方法
receive(DatagramPacket p) 接收数据包
send(DatagramPacket p) 发送数据包
DatagramPacket
构造方法
DatagramPacket(byte[] buf, int length) 构造一个 DatagramPacket用于接收长度的数据包 length
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造一个 DatagramPacket用于接收长度的数据包 length ,指定目的地的地址和端口
byte[] b=new byte[1024];
DatagramPacket dp=new DatagramPacket(b,b.length);
方法
getAddress() 返回该数据报发送或接收数据报的计算机的IP地址
getData() 返回接收到的数据
getLength() 返回数据的长度
setData(byte[] buf, int offset, int length) 设置此数据包的数据缓冲区。
粘包
发送方若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。
接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。