java网络编程复习

1.线程的生命周期各状态。掌握如何创建一个多线程的类(两种方式,一种是 extends Thread,另一种是implements Runable),如何启动一个线程(调用start()方法);

线程池:掌握如何提交一个线程任务(调用submit()方法),如何关闭线程池(如shutdown())

一种方法是通过继承线程类Thread来创建线程类;

class ThreadA extends Thread{

public void run(){

for(int i=0;i<=100;i++){

System。out。print()

}

}

}

public class ThreadApp{

public statc void main(String args[]){

new ThreadA().start()//实例化第一个线程并启动

}

}

另一个方法是建立一个实现Runnable接口的类来创建线程。

class RA implements Runnable{

public void run(){

}

}

public class RunnableApp(){

public statc void main(String args[]){

RA a = new RA();

new Thread(a).start()

}

start()线程启动

run(定义该线程的动作)

sleep()线程休眠

suspend()使线程挂起

resume()回复挂起的线程

yield()线程让步

join(线程加入)

stop()结束线程

destrroy()结束线程不做清理工作

2.TCP和UDP的概念,及其区别(如:是否面向连接,是否更 为可靠,是否传输速率更快等等)。

TCP:面向连接的服务。可靠,一旦建立连接,传输大小无限制,但是需要连接建立时间,差错控制开销大。比如打电话…

UDP:User Datagram Protocol,用户数据报协议。无连接的服务;不可靠,差错控制开销较小;传输大小限制在每个数据报64K之内;发送的数据报并不一定以相同的次序到达接收方。

比如写信…

/*

3.TCP:

  1. 创建TCP服务器的基本过程

①绑定 ->

ServerSocket ss = new ServerSocket(5000);

ServerAddress ServerAddr = new InetSocketAddress(“localhost”,5000);

ss.bind(ServerAddr);

② -> 监听

while(true){

Socket s=ss.accept();

③ 获取输入/输出流通信

BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(),“UTF-8”));

BufferedWriter out = new BufferedWriter(new OutputWriterStream(s.getOutputStream(),“UTF-8”));

String msg = null;

while(msg = in.read()!=null){

if(msg.equals("bye")){

break;

}

out.write("echo:hi"+msg);

out。newLine()

out。flush()

}

④-> 关闭

in.close()

out.close();

s.close();

⑤返回第二步

  1. 创建TCP客户端的基本过程。

①连接

Socket s = new Socket(host,port);

SocketAddress remoteAddr = new InetSocketAddress(“localhost”,5000);

s.connect(remoteAddr);

② ->获取输入/输出流通信

BufferedReader in = new BufferReader(new InputStreamReader(s.getInputStream(),“UTF-8”));

BufferWriter out = new BufferWrite(new OutputStreamWriter(s.getOutputStream(),“UTF-8”));

BufferReader br = new BufferReader(new InputStreamReader(System.in));

String msg = null;

if((msg=br.read())!=null){

out.write(msg);

out.inLine();

out.flush();

if(msg.equals(“bye”)){

break;

}

③-> 关闭

br.close();

in.close();

out.close();

s.close();

}

  1. TCP通信基本编程实现,(参考编程案例,知识点分析:ServerViaTcp.java,ClientViaTcp.java),并掌握如何应用多线程技术实现并行通信

看完了*/

4.安全通信:

1)SSL协议的作用、SSL握手过程,及JDK中提供的相关的主要的包及类

SSL:安全套接字层协议 (Secure Sockets Layer,SSL),SSL提供加密,来源认证和数据完整性验证功能,为Web浏览器和TCP C/S提供安全通信。

TLS:传输层安全协议(Transport Layer Security,TLS),SSL升级版。

JSSE:Java安全Socket扩展(Java Secure Sockets Extension,JSSE),使用SSL和TLS保护网络通信安全

对称加密:加密和解密都使用相同的密钥,如DES、AES

非对称加密: 加密和解密使用不同的密钥,即,密钥对(公钥、私钥),如RSA 用公钥加密的信息,必须用私钥才能解密; 用私钥加密的信息,必须用公钥才能解密;

由于非对称算法加密计算量大,不适合大的数据量, 解决方法是:应用对称密钥加解密数据,应用非对称密钥验证和加解密对称密钥的相关信息。

SSL协议通信的主要过程如下:

①双方发送与确认协议、算法等信息

②双方应用非对称算法确认对方可信

③双方协商生成“对话秘钥”;

④双方应用生成的“对话秘钥”进行加密通信

SSL协议在网络数据交换中的逻辑地位介于TCP传输层与应用层之间 。其作用:

确保数据传送到正确的服务器端和客户端;

防止消息传递过程中被窃取;

防止消息在传递过程中被修改。

安全Socket编程的主要类与接口:

1)javax.net.ssl包 SSLServerSocket(ServerSocket的子类)、 SSLSocket(Socket的子类)、 KeyManagerFactory、TrustManagerFactory、 SSLContext、SSLSocketFactory

2)Java.security包: KeyStore、MessageDigest、Key等等

2)创建安全客户端与服务器Socket的过程

安全Socket服务器创建如下:

①应用keytool工具配置秘钥

②应用KeyStore加载本地秘钥库,并加载可信任客户端的公钥秘钥库,并创建KeyManager和TrustManager管理相应的秘钥库

③创建SSLContext,并关联KeyManager和TrustManager

SSLContext context = SSLContextgetIntance(“SSL”);

④通过SSLContext对象获取SSLServerSocketFactory,并通过SSLServerSocket创建SSLServerSocket,监听端口

⑤接受客户端连接请求,获取SSLSocket

⑥应用SSLSocket获取输出输入流以发送和接收数据

安全Socket客户端创建如下

①应用keytool工具配置秘钥

②应用KeyStore加载本地秘钥库,并加载可信任客户端公钥秘钥库,创建KeyManager和TrustManager管理相关秘钥库

③创建SSLContext管理KeyManager和TrustManager

④应用SSLContext对象获取SSLSocketFactory,并通过SSLSocket创建SSLSocket,连接服务器

⑤应用SSLSocket获取输出输入流以发送和接收数据

5.UDP:

1)创建UDP客户端的基本过程。

①创建DatagramSocket对象,打开一个特定端口的socket

DatagramSocket s = new DatagramSocket(0);

②获取主机的InetAddress

InetAddress ia = InetAddress。getByName(“localhost”);

③建立发送响应的数据包DatagramPacket,指定InetAddress,并调用socket的send方法发送数据包

BufferedReader br = new Buffered(new InputStream(System.in));

String msg = br.readLine();

Datagram pout = new DatagramPacket(msg.getBytes(),msg.getBytes()。length,ia,8000);

s.send(pout);

④建立接受请求数据包DatagramPacket,设置存储数据的数组,并调用Socket的receive方法接收数据包

Datagram pin = new DatagramPacket(new byte[512],512);

s.receive(pin);

⑤关闭连接

s.close();

2)创建UDP服务器的基本过程。

①创建DatagramSocket,绑定指定端口的socket

DatagramPacket s = new DatagramPaccket(8000);

byte [] buf = new byte[1024];

②建立接受请求数据包DatagramPacket,设置存储数据的数组,并调用receive方法监听端口和接收数据包

DatagramPacket pin = new DatagramPacket(new byte[512],512);

s.receive(pin);

③建立发送响应请求的数据包DatagramPacket,并调用send方法发送数据

String msg = new String(pin.getData());

String replyMsg = “echo:”+msg;

DatagramPacket pout = new DatagramPacket(replyMsg.getBytes(),replyMsg.getBytes().lenght,pin.getAddress(),pin.getPort());

s.close()

④返回步骤2,继续监听端口和接收数据。

s.close()

3) UDP通信基本编程实现。(参考编程案例)

6.非阻塞I/O:服务器和客户端的基本事件,以及判断哪种事件(key.isAcceptable(), key.isReadable(), key.isWritable())。

非阻塞的通信机制主要由 java.nio 包中的类实现,

主要类:

ServerSocketChannel:ServerSocket替代类,支持阻塞通信与非阻塞通信

SocketChannel:Socket替代类,支持阻塞通信与非阻塞通信

Selector:为ServerSocketChannel监控接收连接就绪事件,为SocketChannel监控连接就绪、读就绪和写就绪事件

SelectionKey:其定义的静态常量表示事件类型

ByteBuffer:表示字节缓冲区,SocketChannel的read()和write()方法都会操纵ByteBuffer

/*

7.流:字节流与字符流的区别,字节流如何转换成字符流,

常用的字节流类和字符流类及其方法的应用。

字节流:处理单元为1个字节,操作字节和字节数组。抽象父类是 InputStream 和OutputStream

字符流:处理的单元为两个字节的Unicode字符,分别操作字符、字符数组或字符串。抽象父类是 Reader 和 Writer

//构建套接字输入流,接收客户端数据

DataInputStream in = new DataInputStream(new BufferedInputStream(s.getInputStream()))

//构建套接字输出流,以发送数据给服务器

DataOutPutStream out = new DataOutPutStream(new BufferedOutputStream(s.getOutputStream()))

*/

8.HTTP:

1)请求参数的方式(如get, post等等),各自的适用范围。

方法名 备注
GET 获取一个URL指定的资源。通常用于向服务器索取信息,请求参数放在URL中
POST 将资一个资源上传到已知URL的服务器,不可重复操作。通常用于向服务器提交信息,请求参数放在请求头部
PUT 将一个资源上传到已知URL的服务器
DELETE 从一个指定URL删除一个资源,可重复提交
HEAD 获取一个指定资源的信息
TRACE 网络跟踪
CONNECT 与PROXY之间的连接管理
OPTIONS 查询能力

2)至少掌握两种获取网页内容的方法:URL(可参考例子:MyHttpGetterByURL

), HttpClient(可参考例子:教材p282程序12.1)

9.线程池

①创建线程池

ExecutorService pool = Execuors.newFixedThreadPool(5)

②提交线程

Runnable task = new MyRunnable();

pool.submit(task);

③关闭线程池

pool。shutdow();

10.组播

实现类:MulticastSocket、DatagramPacket MulticastSocket是DatagramSocket的子类

加入组播组:joinGroup(InetAddress grouphost)

发送、接收数据:send(DatagramPacket p)、 receive(DatagramPacket p)

离开组播组:leaveGroup(DatagramPacket p)

设置TTL(生存时间):setTimeToLive(int ttl)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值