Java网络编程

耗尽温柔 提交于 2020-03-07 17:18:38

网络分为:局域网、城域网、广域网

 

把软件架构的分类:

 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();
			}
		}

  

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!