------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、网络模型
网络七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
一般来说开发处于传输层和网际层,应用层为:FTP和HTTP协议等,传输层为:UDP和TCP等,网际层为:IP。
网络通信:协议:IP,端口号。IP地址全球唯一。
IP地址对应InetAddress类。存在Java.包中。
InetAddress类的一些方法:无构造函数,可通过getLocalHost()方法获取InetAddress对象,此方法是静态的,返回本类对象。
代码实例:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class IpDemo {
/**
* 获取IP地址练习
* @param args
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException {
// 获取IP地址对象
InetAddress ip = InetAddress.getByName("www.baidu.com");
// 获取主机IP
String str_ip = ip.getHostAddress();
String ip_dns = ip.getHostName();
System.out.println("IP:"+str_ip+"\r\n主机名:"+ip_dns);
}
}
二、UDP(不面向连接)
特点:1.将数据源和目的封装到数据包中,不面向连接
2.最多一次传输64K;
3.不面向连接,不可靠传输。
4.传输速度慢。
主要应用:聊天、视频播放等传输要求速度快的。
代码:
package com.itheima.udp;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendPictureDemo {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("UDP发送...........");
// 1.建立发送服务
DatagramSocket ds = new DatagramSocket();
// 2.明确发送源
String send_str = " UDP 传输实现... ";
// File file = new File("F:\\456.png");
// long b =file.length();
// System.out.println(b);
// ByteArrayInputStream bis = new ByteArrayInputStream ();
byte[] buf = send_str.getBytes();
DatagramPacket dp =new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"), 8888);
// 3。发送数据
ds.send(dp);
// 4.关闭服务
ds.close();
}
package com.itheima.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Receive {
/**
* 思路:
* 1.建立udp的接受端
* 2.接受数据包
* 3.获取IP,端口号,数据包内容
* 4.关闭资源
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 1.建立udp的接受端
System.out.println("UDP接受......");
DatagramSocket ds = new DatagramSocket(8888);
// 2.接受数据包
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
ds.receive(dp);//阻塞方法,会一直等待。
// 3.获取IP对象
InetAddress ia = dp.getAddress();
String str_ip = ia.getHostAddress();
String str_name =ia.getHostName();
// 获取端口号
int str_port = ds.getPort();
// 获取传输内容;
System.out.println(" "+new String (dp.getData() ,0 ,dp.getLength())+" ::::"+str_ip+"::::::"+str_name+" "+str_port);
}
}
三、TCP(面向连接)
特点:1.建立连接,形成传输通道。
2.一次可以传输大量数据。
3.面向连接,可靠传输。
4.传输慢。
应用:文件的上传,下载,可靠性高的。
代码实例:
package com.itheima.tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
/**
* TCP通信练习
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) throws IOException {
System.out.println("客户端开启.......");
//1.建立TCP服务
Socket s = new Socket("127.0.0.1",10005);
//
OutputStream os = s.getOutputStream();
// 写入流
os.write("hello".getBytes());
os.close();
}
}
package com.itheima.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
/**
* 接收端
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 建立TCP服务端对象
System.out.println("服务端开启。。。");
ServerSocket ss = new ServerSocket(10005);
// 接受
Socket s = ss.accept();
InetAddress ip = s.getInetAddress();
String str_ip = ip.getHostAddress();
System.out.println("IP:"+str_ip);
// 数据源
InputStream is = s.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
// 读取数据
while ((len = is.read(buf)) != -1) {
System.out.println(new String(buf, 0 ,len));
break;
}
反馈数据
// PrintWriter pw = new PrintWriter(s.getOutputStream() ,true);
// pw.println("<h1> nihao </h1>");
// is.close();
s.close();
// pw.close();
ss.close();
}
}
四、URL(统一资源定位符)
常用方法:
看代码:
package com.itheima.url;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class UrlDemo {
/**
* URL类 演练
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String str_url = "http://127.0.0.1:8080//16//index.jsp";
URL url = new URL(str_url);
// 获取对象中的各种协议
System.out.println("Protocol="+url.getProtocol());
System.out.println("Host="+url.getHost());
System.out.println("prot="+url.getPort());
System.out.println("File="+url.getFile());
System.out.println("Query="+url.getQuery());
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = is.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
is.close();
}
}