java基础之网络编程


1、网络模型:
|--不依赖于实际的设备和主机,如计算机等,只要符合网络的要求,皆可连上网络;
|--数据从最高层到最低层,传输后再从最底层到最高层;
2、OSI(Open System Interconnection开放系统互连)参考模型
|--物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,
也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
|--数据链路层:主要将从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装。常把这一层
的数据叫做帧。在这一层工作的设备是交换机,数据通过交换机来传输。
|--网络层:主要将从下层接收到的数据进行IP地址(例192.168.0.1)的封装与解封装。在这一层工作的
设备是路由器,常把这一层的数据叫做数据包。
|--传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率
低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性
恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。
主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
|--会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间
发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)
|--表示层:主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够
识别的东西转换成人能够能识别的东西(如图片、声音等)。
|--应用层: 主要是一些终端的应用,比如说FTP(各种文件下载),WEB(IE浏览),QQ之类的(可以
把它理解成我们在电脑屏幕上可以看到的东西.就是终端应用)。
3、P地址:InetAddress
|--网络中设备的标识
|--不易记忆,可用主机名
|--本地回环地址:127.0.0.1 主机名:localhost
4、端口号:
|--用于标识进程的逻辑地址,不同进程的标识
|--有效端口:0~65535,其中0~1024系统使用或保留端口。
5、传输协议
|--通讯的规则
|--常见协议:TCP,UDP

6、TCP/IP四层模型;
应用:应用、表示、会话
传输:传输
网际:网络层
主机至网路层:数据链路层、物理层;
7、传输协议:通讯的规则
|--UDP:
|--将数据及源和目的封装成数据包中,不需要建立连接
|--每从此套接字发送数据报包。
|--接收数据包:
|-- void receive(DatagramPacket p)
从此套接字接收数据报包。
12、DatagramPacket
|--类说明:
|--此类表示数据报包。 数据报包用来实现无连接包投递服务
|--构造函数:
|--DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号
|--DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
|--DatagramPacket(byte[] buf, int offset, int length)
构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。
13、UDP发送过程:
|--过程:
|--建socket,建包,发包,关闭资源
|--在发送端,要在数据包对象中明确目的地IP及端口。
|--代码实现:
|--DatagramSocket ds = new DatagramSocket();
|--byte[] by = “hello,udp”.getBytes();
|--DatagramPacket dp = new DatagramPacket(by,0,by.length,
|--InetAddress.getByName(“127.0.0.1”),10000);
|--ds.send(dp);
|--ds.close();
13、UDP接收过程:
|--过程:
|--建socket,建包,接收,解析,关闭资源
|--在接收端,要指定监听的端口。
|--代码实现:
|--DatagramSocket ds = new DatagramSocket(10000);
|--byte[] by = new byte[1024];
|--DatagramPacket dp = new DatagramPacket(by,by.length);
|--ds.receive(dp);
|--String str = new String(dp.getData(),0,dp.getLength());
|--System.out.println(str+"--"+dp.getAddress());
|--ds.close();
14、TCP/IP协议:
|--核心类Socket和ServerSocket
|--建立客户端和服务器端
|--建立连接后,通过Socket中的IO流进行数据的传输
|--关闭socket
|--同样,客户端与服务器端是两个独立的应用程序。
15、TCP发送过程
|--原理:
|--客户端需要明确服务器的ip地址以及端口,这样才可以去试着建立连接,如果连接失败,会出现异常。
|--连接成功,说明客户端与服务端建立了通道,那么通过IO流就可以进行数据的传输,而Socket对象
已经提供了输入流和输出流对象,通过getInputStream(),getOutputStream()获取即可。
|--与服务端通讯结束后,关闭Socket。
|--代码实现:
通过Socket建立对象并指定要连接的服务端主机以及端口。
|--Socket s = new Socket(“192.168.1.1”,9999);
|--OutputStream out = s.getOutputStream();
|--out.write(“hello”.getBytes());
|--s.close
第3/5页
();
16、TCP接收过程:
|--原理:
|--服务端需要明确它要处理的数据是从哪个端口进入的。
|--当有客户端访问时,要明确是哪个客户端,可通过accept()获取已连接的客户端对象,并通过
该对象与客户端通过IO流进行数据传输。
|--当该客户端访问结束,关闭该客户端。
|--代码实现:
建立服务端需要监听一个端口
|--ServerSocket ss = new ServerSocket(9999);
|--Socket s = ss.accept ();
|--InputStream in = s.getInputStream();
|--byte[] buf = new byte[1024];
|--int num = in.read(buf);
|--String str = new String(buf,0,num);
|--System.out.println(s.getInetAddress().toString()+”:”+str);
|--s.close();
|--ss.close();
17、Socket类:
|--类说明:
|--此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点
|--构造函数:
|-- Socket(InetAddress address, int port)
|--创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
|--获取输入流
|-- InputStream getInputStream()
|--返回此套接字的输入流。
|--获取输出流:
|-- OutputStream getOutputStream()
|--返回此套接字的输出流。
|-- 输出流结束:
|--void shutdownOutput()
|--禁用此套接字的输出流。
|--Socket对象字符串形式
|-- String toString()
|--将此套接字转换为 String。
18、ServerSocket类:
|--类说明:
|--此类实现服务器套接字。服务器套接字等待请求通过网络传入。
|--构造函数:
|--ServerSocket(int port)
|-- 创建绑定到特定端口的服务器套接字
|--获取请求对象:
|-- Socket accept()
|-- 侦听并接受到此套接字的连接。
19、模拟浏览器:
|--原理:
|--服务器实际上就是一个ServerSocket对象
|--在浏览器发给服务器的内容中必须包含:
|--请求行:out.println("GET /myweb/2.html HTTP/1.1");
|--其中GET表示请求,/myweb/2.html表示请求资源,HTTP/1.1表示请求协议
|--请求头:
|--out.println("Accept: */*");表示可接受的文件格式
|--out.println("Host: 192.168.1.253:9090");
|--out.println("Connection: close");
|--空行
20、URL类:
|--类说明:
|--类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针
|--构造函数:
|--URL(String spec)
|--根据 String 表示形式创建 URL 对象。
|--建立连接对象:
|--URLConnection openConnection()
返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。
21、URLConnection类
|--类说明:
|--抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。
此类的实例可用于读取和写入此 URL 引用的资源。
|--构造函数:
|--protected URLConnection(U
第4/5页
RL url)
|-- 构造一个到指定 URL 的 URL 连接。
|--获取输入流
|-- InputStream getInputStream()
|--返回从此打开的连接读取的输入流。
|--获取输出流:
|-- InputStream getInputStream()
|--返回从此打开的连接读取的输入流。
22、Tcp传输最容易出现的问题:
|--现象:
客户端连接上服务端,两端都在等待,没有任何数据传输。
|--原因:
通过例程分析:因为read方法或者readLine方法是阻塞式。
|--解决办法:
自定义结束标记,使用shutdownInput,shutdownOutput方法。
23、练习:
|--建立一个群聊服务端。
|--send和rece均实现多线程Runnable接口,可以实现一对一的
|--因为最低字段为255是UDP广播ip,可以向255发送,DNS会自动
向其中任意ip发送数据;
|--客户端向服务端上传一个图片。
|--
|--客户端向服务端发送用户名请求登陆,服务端通过验证,返回“欢迎光临”,未通过“用户不存在”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值