Socket通信
TCP/IP
IP:Intenet Protocol 网络协议,支撑主机之间通信的基本协议,如果需要实现主机之间消息安全传输,通常会结合TCP协议共同使用,全称为TCP/IP 都属于传输层协议
TCP:传输控制协议,能保证数据消息在主机之间安全传输,三次握手,四次挥手,是一个安全传输数据协议,所以一般用于对数据传输的准确性,安全性较高的应用,但是效率较低,比如:视屏通话
传输层协议:TCP/IP、UDP 交通工具
应用层协议:Http,Ftp,Echo。。。 交通工具中运送的货物类型
服务器/客户端模式:要求通信双方之间必须存在一个服务器
UDP
UDP:user datagram Protocol 用户数据报协议,无法保证数据的安全性,但是可以提高数据传输的效率
UDP协议没有所谓服务器客户端的概念,只有数据的接收方以及数据的发送方,并且接收方也可以是消息发送方,反之亦然!
NIO与传统IO
NIO是jdk1.4之后引入的一套全新的IO API,处理数据的方式不同于传统IO,传统IO处理数据的方式以字节单位;而NIO是一个Buffer(数据块)为单位,传统IO属于阻塞式(流在读取数据时如果未读取到时,程序会处于阻塞状态);而NIO处理的方式为非阻塞式方式运行(底层原理为信号的处理),NIO可以在单线程的应用中处理多个客户端请求`
//对URL地址做转码和解码处理
String query = “java网络编程 多线程编程 io流”;
query = URLEncoder.encode(query, “utf-8”);
System.out.println(query);
query = URLDecoder.decode(query, “utf-8”);
System.out.println(query);
TCP/IP
//服务端,启动服务,监听连接
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
//客户端,连接服务器
Socket s = new Socket(IP,port);
通信数据是通过
s.getInputStream()和s.getOutputStream()完成
当然也可以使用高级流对其进行包装
UDP
//接收端
//占据一个端口准备接收数据
DatagramSocket socket= new DatagramSocket(port);
//创建空数据包报准备接受读取到的数据
byte[] b = new byte[1024];
DatagramPacket packet = new DatagramPacket(b, b.length);
//接数据
socket.receive(packet);
String s = new String(
packet.getData(),
packet.getOffset(),
packet.getLength());
//发送端
String msg = “信息”;
//创建网络通道
DatagramSocket socket = new DatagramSocket();
//将数据打包成数据报包
DatagramPacket packet = new DatagramPacket(
msg.getBytes(), //需要发送的数据的字节数组
msg.getBytes().length, //需要发送的数据字节总长度
InetAddress.getByName(IP), //接收方的ip地址
port //接收方的端口号
);
//发送数据报包
socket.send(packet);
//关闭通道
socket.close();`
暂时只有这么多啦,如果还有补充的话,会及时更新的~