1、InetAddress
InetAddress布局器私有,可以通过多种办法得到inetAddress工具
InetAddress ip = InetAddress.getLocalHost();//获取本机IP
ip = InetAddress.getByName(\"大众100.64.141.89\"大众);//通过名字获取指定地址IP
String name = ip.getHostName();//通过IP获取IP名字
2、URL统一资源定位符
范例构成:1、网络协议(https://);2、主机地址(192.168.46.20/myServlet);3、端口号(80);4、资源路径(crm/index.jsp);5、查询地址(gid=117)
//布局器多种,可以采取指定URL连接布局一个URL,也可以使协议,用端口号,文件名等信息构成URL
String str = \"大众https://192.168.46.254:8888/easyBuy/crm/index.jsp\"大众;
URL url = new URL(str);
String protocol = url.getProtocol();// 获取协议
String host = url.getHost();// 主机名
int port = url.getPort();//端口号
对资源文件的一样平常操作
String file = url.getFile();//获取资源中包含的文件名称
InputStream is = url.openStream();//打开此URL连接(URLConnection),并获取连接的输入流(URLconnection.getOutputStream())
对URL地址进行转码,解码,防止乱码
String str1 = URLEncoder.encode(str, \公众UTF-8\"大众);//对str字符串进行UTF-8转码
String str2 = URLDecoder.decode(str1, \"大众UTF-8\公众);//解码
3、HttpURLConnection
继续URLConnection类;Http协议简介 http是一个无状态协议,要求、相应协议由要求头和相应头构成 。
①要求头: 要求方法:get post deleteput.....
②相应头 相应状态码:status code:200(正常相应) 400~(404,405要求资源非常,不存在,要求相应格式不一致) 500~(500做事器内部非常)
//利用HttpURL协议下载文件
String str3 = \"大众https://www.2cto.com/uploadfile/2018/0505/20180505091634764.jpg\公众;
URL url2 = new URL(str3);
// 打开一个URL连接
HttpURLConnection conn = (HttpURLConnection) url2.openConnection();//获取一个连接(URLConnection)
// 设置要求方法
//conn.setRequestMethod(\"大众GET\"大众);
// conn.setRequestProperty(\"大众Accep-Language\"大众, \"大众zh-en\"大众);
//conn.setReadTimeout(10000);// 设置读取超时时间,可以默认
// conn.setDoInput(true);// 打开输入和输出,可以不设置,默认true
//conn.setDoOutput(true);
//int code = conn.getResponseCode();// 获取相应状态码
// System.out.println(code);
// 判断是否相应成功
if (code == HttpURLConnection.HTTP_OK) {
InputStream is1 = conn.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(new File(\"大众C:\\Users\\lx\\Desktop\\test\\mn.jpg\"大众));
BufferedInputStream bfi = new BufferedInputStream(is1);
BufferedOutputStream bfo = new BufferedOutputStream(fileOutputStream);
int len;
byte[] bs = new byte[1024];
while((len=bfi.read(bs))!=-1){
bfo.write(bs, 0, len);
bfo.flush();
}
}
二、Socket通讯:
1、TCP/IP
IP:InternetProtocol 网络协议,支撑主机之间通讯的基本协议,如果须要实现主机之间的安全传输,常日会结合TCP协议共同利用。全称为TCP/IP。都是传输层协议。
TCP:传输掌握协议,能担保数据的在主机之间安全传输,三次握手,四次挥手。是一个安全传输数据协议,以是一样平常用于数据传输的准确性,安全性较高的运用,但是效率较低,如:视频通话。
C/S 架构: Client/Server 客户端/做事器模式
B/S 架构: Browser/Server 浏览器/做事器模式
做事器端:
1、创建serverSocket,此套接字为做事器专用,布局器应该包含端口号,以供其他主机连接。
2、监听套接字,并得到连接:Socket socket = serverSocket.accept( );
3、获取套接字输出流:socket.getOutputStream( );
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println(\"大众做事器开启\"大众);
while (true) {
Socket socket = serverSocket.accept();
System.out.println(\公众客户端已经连接\"大众 + socket.getInetAddress());
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.print(\"大众欢迎利用socket做事器\"大众);
}
客户端
1、利用布局器获取以供连接的套接字,属性包含目标IP和端口号
2、获取套接字里面的输入流:socket.getInputStreeam( );
Socket socket = new Socket(\"大众127.0.0.1\"大众, 9999);
InputStreamReader isr = new InputStreamReader(socket.getInputStream());
BufferedReader br = new BufferedReader(isr);
String msg = br.readLine();
System.out.println(msg);
2、UDP
UDP:user datagram Protocol 用户数据协议,无法担保数据的安全性,但是可以提交数据传输的效。吸收数据:为壅塞式,须要单独作为一个线程
1、创建网络通道datagramSocket,应该是包含端口地址的布局器
2、创建数据包datagramPacket ,个中布局方法必须包含一个空的字符缓冲区,偏移量等信息。
3、通过datagramSocket.receiver(datagramPacket);接管数据,向数据包写入数据。
4、获取数据包内容 new String(datagramPacket.getData() , datagramPacket.getOffset(),datagramPacket.getLength());
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(2345);
byte[] b = new byte[1024];
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
datagramSocket.receive(datagramPacket);//接管数据
String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),
datagramPacket.getLength());
System.out.println(\公众接管到的数据是\公众 + string);
}
}
发送数据:
1、创建网络通道datagramSocket,布局器不需写入
2、创建数据包 datagramPacket,布局方法里面包含须要写入的字节数组,偏移量,目标地址,目标端口号,当然也可以通过set办法设置目标地址地址等信息
3、发送数据报 datagramSocket.send(datagramPacket);
public static void main(String[] args) throws IOException {
//创建一个网络通道
DatagramSocket datagramSocket = new DatagramSocket();
//将数据打包成数据报包
String message=\"大众nnnnnn\"大众;
DatagramPacket datagramPacket = new DatagramPacket(
message.getBytes(), message.getBytes().length,
InetAddress.getByName(\"大众192.168.46.19\"大众),
2345);
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
3、UDP多播广播
发送数据:
1、创建多播广播通道 new MulticastSocket( );
2、获取组播地址并将广播加入此地址 multicastSocket.jionGroup( InterAddress.getByName(\"大众266.81.9.8\公众) );
3、构建datagramPacket,包含byte[]的内容,byte[]长度,ip,端口号。当然可以不用在构建方法添加ip和端口号。
4、发送:multicastSocket.send(datagramPacket);
public static void main(String[] args) throws IOException {
MulticastSocket multicastSocket = new MulticastSocket();
InetAddress group = InetAddress.getByName(\公众226.81.9.8\"大众);
multicastSocket.joinGroup(group);
String content = \公众刷屏100遍\公众;
DatagramPacket dp = new DatagramPacket(content.getBytes(),content.getBytes().length);
dp.setAddress(group);
dp.setPort(2426);
multicastSocket.send(dp);
}
吸收数据:壅塞式,须要单独作为一个线程
1、创建多播广播通道:new MuliticastSocket(2426); 布局方法应该包含开启的端口号
2、获取广播地址,并加入此广播地址 muliticast.jionGroup(InterAddress.getByName(\公众192.22.22.2\"大众));
3、创建你个空的btye[]数组。和一个datdagramPacke工具。包含btye[]干系信息
4、吸收数据:mutilicastSocket.receive(datagramPacket);
5、读取datagramPacket内容:利用String的布局方法
public static void main(String[] args) throws IOException {
MulticastSocket ms= new MulticastSocket(2426);
InetAddress group = InetAddress.getByName(\"大众226.81.9.8\"大众);
ms.joinGroup(group);
byte[] b = new byte[1024];
while (true) {
DatagramPacket datagramPacket = new DatagramPacket(b, b.length);
ms.receive(datagramPacket);//接管数据
String string = new String(datagramPacket.getData(), datagramPacket.getOffset(),
datagramPacket.getLength());
System.out.println(datagramPacket.getAddress()+\"大众\"大众 + string);
}
4、NIO
NIO是jdk1.4之后引入的一套全新的IO API,处理数据的办法不同于传统IO,传统IO的处理数据的办法以字节为单位,而NIO是一个Buffer(数据块) 为单位,传统IO属于壅塞式(流在读取数据时如果未读到时,程序会处于壅塞状态);而NIO的处理的办法为非壅塞式办法许可(底层为旗子暗记通讯),NIO可以在单线程运用中处理多个客户要求。