码迷,mamicode.com
首页 > 编程语言 > 详细

Java网络编程----基础

时间:2018-01-31 17:06:58      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:物理层   三次握手   false   .net   udp   imp   解封   out   思路   

1、网络模型

OSI参考模型:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

TCP/IP参考模型: 应用层 传输层 网际层            主机至网络层

OSI七层简述:

物理层:主要定义物理设备标准,如网线接口类型、光纤接口类型、各种传输介质的传输速率等等

。主要作用是传输比特流(将1、0转换为电流强弱)

数据链路层:主要是将从物理层接收到的数据进行MAC地址的封装和解封装。这一层工作的

设备是交换机

网络层:主要将从下层接收到的数据进行ip地址的封装和解封装。这一层的主要设备是路由器。

路由器进行数据包传播方向的定义

传输层:定义了一些传输数据的协议和端口号(TCP/UDP)

会话层:通过传输层建立数据传输的通路

表示层:对接受数据进行解释、加密和解密、压缩和解压缩

应用层:主要对应计算机的应用软件,即终端应用

2、网络通讯要素

IP地址

(1)网络中的设备的标识

(2)不易记忆,可用主机名

(3)本地回环地址:127.0.0.1 主机名:localhost

端口号

(1)用于标识进程的逻辑地址,不同进程的标识

(2)有效端口:0~65535,其中0~1024是系统使用或保留端口

传输协议

(1)通讯规则

(2)常见协议:TCP  UDP

3、TCP与UDP协议的区别

TCP:传输控制协议      打电话、下载数据、

(1)建立连接,形成传输数据通道

(2)在连接中进行大量数据传输

(3)通过三次握手完成连接,是可靠协议(a:哥们你在吗?b:我在。a:好,我知道你在了。)

(4)必须建立连接,效率会稍低


UDP:              对讲机 QQ聊天 在线视频聊天 以速度快为主,不可靠,对方可能不在线

(1)将数据及源和目的封装成数据包,不需要建立连接

(2)每个数据包的大小限制在64k内

(3)因无连接,是不可靠协议

(4)不需要建立连接,速度快

4、什么是socket

Socket(套接字)

(1)Socket就是为网络服务提供的一种机制

(2)通信的两端都有Socket

(3)网络通信其实就是Socket间的通信

(4)数据在两个Socket间通过IO传输

下面使用java进行简单的socket通信,通信协议分为TCP和UDP

java中使用udp进行数据发送,用到的api主要是java.net包下的,代码示例如下:

发送端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.Inet6Address;

public class UDPSendDemo {

	/*
	 * 创建UDP传输的发送端。 思路: (1)建立UDP的socket服务 
	 * (2)将要发送的数据封装到数据包中
	 * (3)通过UDP的socket服务将数据包发送出去 
	 * (4)关闭socket服务
	 */
	public static void main(String[] args) throws IOException {
		System.out.println("发送端启动......");
		//启动socket服务
		DatagramSocket socket = new DatagramSocket();
		//需要发送的数据
		String str = "你是**?";
		byte[] bt = str.getBytes();
		//需要发送的数据包,里面封装了数据内容、数据大小、目的地ip地址、目的地应用程序的端口号
		DatagramPacket dp = new DatagramPacket(bt, bt.length,Inet6Address.getByName("fe80::c93c:a4cb:e167:cb7e%14"), 10000);
		System.out.println(dp.getAddress().getHostAddress());
		//发送数据包
		socket.send(dp);
		//关闭socket服务
		socket.close();
	}
}


接收端代码:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiveDemo {

	/*
	 * 建立UDP接收端的思路: 
	 * (1)建立UDP socket服务 
	 * (2)创建数据包,用于存储接收到的数据,方便用数包对象的方法解析这些数据
	 * (3)使用socket服务的receive方法将接收到的数据存储到数据包中
	 * (4)通过数据包的方法解析数据包中的数据 (5)关闭资源
	 */
	public static void main(String[] args) throws IOException {
		System.out.println("接收端启动......");
		//创建socket服务并设置端口号
		DatagramSocket socket = new DatagramSocket(10000);
		//创建一个数据包勇于接收数据
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		//接收
		socket.receive(dp);
		//解析出数据包中的内容并打印出来
		String text = new String(dp.getData(), 0, dp.getLength());
		int port = dp.getPort();
		String ip = dp.getAddress().getHostAddress();
		System.out.println(ip + ":" + port + "说:" + text);
		//关闭socket服务
		socket.close();
	}
}


Java网络编程----基础

标签:物理层   三次握手   false   .net   udp   imp   解封   out   思路   

原文地址:http://blog.51cto.com/12222886/2067392

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!