Java网络编程
网络分为:局域网、城域网、广域网
把软件架构的分类:
C/S 架构: Clinet -Server(客户端-服务器)
B/S 架构: Browser/Server(浏览器/服务器)
传输协议:
1) UDP: :用户数据报协议(User Datagram Protocol), 不可靠的,速度快
UDP是无连接通信协议.
特点:数据被限制在64kb以内,超出这个范围就不能发送了。
数据报(Datagram):网络传输的基本单位
类似于:发短信: 只管发, 不管收
2) TCP: TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,
然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。 可靠的
类似于:打电话:
TCP通信: 面向连接, 确保两台电脑是连接, 三次握手机制 *
TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。
链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
运输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。
网络编程: 三要素
1、ip
查看本机ip地址: cmd--ipconfig
ping ip; 看你的电脑能不能访问指定ip 的电脑
2、端口
如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。
UDP的端口 65535个
TCP的端口 65535个
个人使用的端口: 1024之后
3、协议 B/S 使用http协议
http:// 协议 默认的端口号: 80
https:// 协议, 更安全 默认的端口号: 443
代码:
先打开服务器,客户端才能进行通信
端口号必须一致
客户端:
//通过Socket连接
Socket socket =null;
OutputStream os = null;
try {
//发送数据, 接收数据
//发送一个数据给服务器 使用网络输出流
socket = new Socket("127.0.0.1",10001);
os = socket.getOutputStream();
//输出流的写方法, 发送数据
os.write("hello".getBytes());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if( socket != null){
socket.close();
}
if( os != null){
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
服务端:
//1.创建一个ServerSocket, 监听服务器端的一个端口 ServerSocket server = null; InputStream is = null; try { server = new ServerSocket(10001); //2.调用accept() 接收客户端的连接 阻塞式, 如果没有客户端连接, 这个程序停在accept() Socket socket = server.accept(); //System.out.println("来了"); //3.接收数据, 发送数据 //接收数据 输入流 is = socket.getInputStream(); int rs = -1; while((rs = is.read()) != -1){ System.out.print((char)rs); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(server != null){ server.close(); } if(is != null){ is.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }