现在java的技术栈一般是spring+tomcat,好像不关网络编程什么事儿。确实,由于网络编程和具体的业务相对独立,所以网络被做成框架了,我们只要使用就好,但是作为要靠技术吃饭的程序员,还是有必要了解网络编程的。
java中设计网络编程的包有java.net和java.nio。其总的类有:
Socket是TCP客户端API,通常用于连接远程主机
ServerSocket是TCP服务端API,通常接受源于客户端套接字的连接
DatagramSocket是UDP端点API,用于发送和接受数据包
MulticastSocket是DatagramSocket的子类,在处理多播组时使用
具体怎么使用呢?无非就是服务端和客户端的通信,socket和serverSocket。拿到socket对象,就可以获得输入流和输出流,分别对应了请求和返回的报文。注意这时,使用get,post等方法是无效的,此时还未涉及到http协议。
写了一个简单的client和server端,然后测试了一些特性,对于Socket通信比较熟悉了。但是Socket通信的一个特点就是read方法和write方法是阻塞的,想要同时响应多个请求,只能使用多线程操作。于是就有了SocketChannel,非阻塞的socket,read,write,connect都是非阻塞的,这个时候就要考虑同步的问题了。
参考文章:https://blog.csdn.net/zjpp2580369/article/details/82624326
SocketChannel:https://www.cnblogs.com/mishaka/articles/11132247.html
SocketChannel:https://www.jianshu.com/p/007adba06047