网络编程
计算机网路
- 所谓计算机网络,就是把分布在不同区域的计算机与专门的外部设备用通信线路相互连接成一个规模大,而且功能强的网络系统,从而使得计算机之间可以相互传递信息,共享数据、软件等资源
- 所谓的网络编程,指的就是在同一个网络中不同机器之间的通信
IP地址
- IP地址的是互联网地址(Internet Protocol Address),是联网设备与互联网之间的唯一标识,在同一个网段中,IP地址是唯一的
- IP地址是数字型的,是一个32位的整数,通过将其分成4个8位的二进制数,每8位之间用圆点隔开,每个8位整数可以转换为一个0~255的十进制整数
- 分为IPV4和IPV6
- IP地址分类
A类:保留给政府结构,1.0.01~126.255.255.254
B类:分配给中型企业,127.0.0.1~191.255.255.254
C类:分配给任何需要的个人,192.0.0.1~223.255.255.254
D类:用于组播,224.0.0.1~239.255.255.254
E类:用于实验,240.0.0.1~255.255.255.254
端口
- 数据的发送和接收都需要通过端口出入计算机,端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能两个程序占用同一个端口
- 端口号的取值范围:0~65535
- 端口分类:
- 公认端口:0~1023
- 注册端口:1025~49151
- 动态或私有端口:1024~65535
- 常用端口:
- mysql:3306
- oracle:1521
- tomcat:8080
通信协议
- 需要通信的设备之间需要实现相同的通信协议
- 网络分层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
- 通信协议分类:
- 传输层协议:TCP和UDP
- 网络层IP协议:IPV4和IPv6,互联网协议
- 应用层协议:HTTP
相关类的使用
InetAddress类
package waking.test.wl;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Demo01 {
public static void main(String[] args) {
InetAddress ia = null;
try {
ia = InetAddress.getLocalHost();
System.out.println(ia);
String hostName = ia.getHostName();
System.out.println(hostName);
String hostAddress = ia.getHostAddress();
System.out.println(hostAddress);
ia = InetAddress.getByName("www.baidu.com");
System.out.println(ia);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
URLEncoder类和URLDecoder类
package waking.test.wl;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Demo02 {
public static void main(String[] args) {
try {
String encode = URLEncoder.encode("waking","GBK");
System.out.println(encode);
String decode = URLDecoder.decode(encode,"utf-8");
System.out.println(decode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
TCP网络通信
- TCP,Transmission Control Protocol,传输控制协议,基于字节流的传输层通信协议
- 特点:
安全的
面向链接的
传输数据无限制,一旦连接建立,双方可以按统一的格式传输大的数据
客户端向服务端发送一个请求
服务端收到请求后,回客户端一个响应
客户端向收到服务端的响应后,回服务端一个确认信息
socket模型
代码实现
package waking.test.wl;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Demo03 {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket so = new Socket("127.0.0.1", 9099);
OutputStream os = so.getOutputStream();
String name = "waking";
os.write(name.getBytes(), 0, name.length());
os.flush();
so.close();
}
}
package waking.test.wl;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Demo030 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9099);
Socket accept = ss.accept();
InputStream is = accept.getInputStream();
byte[] b = new byte[1024];
int read = is.read(b);
System.out.println(new String(b, 0, read));
ss.close();
}
}
package waking.test.wl;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Demo04 {
public static void main(String[] args) throws UnknownHostException, IOException {
Socket so = new Socket("127.0.0.1", 9009);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("E://timg.jpg")));
BufferedOutputStream bos = new BufferedOutputStream( so.getOutputStream());
byte[] b = new byte[1024];
int len = -1;
while((len=bis.read(b))!=-1) {
bos.write(b, 0, len);
}
bos.close();
bis.close();
so.close();
}
}
package waking.test.wl;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Demo040 {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9009);
Socket accept = ss.accept();
BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("E://a.jpg")));
byte[] b = new byte[1024];
int len = -1;
while((len=bis.read(b))!=-1) {
bos.write(b, 0, len);
}
bos.close();
bis.close();
accept.close();
ss.close();
}
}
UDP通信
- 这里简单介绍
- User Datagram Protocol的简称,用户数据包协议,提供面向事物的简单不可靠信息传送服务
特点:
不安全
无连接
效率高
UDP传输数据时是有大小限制的,每个被传输的数据报必须限制在64kb之内