学了这么久的网络编程,你该有一份完整的笔记整理了
对于网络编程,在我们学Java初级的时候就是一个章节在学习。而在工作的时候,不可避免的都会接触。真正让我们能够成长和提升的,还是最开始基础的内容。今天,给大家整理一份完整的笔记,内容厚重。
网络的基本概念:
a)网络就是由一组多台计算机通过网线链接组成的
b)网络的的作用:通过网络进行数据的传递 以及资源的共享
c)网络编程:就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换
网络的三要素:
IP地址
唯一标识一个计算机
查看本机的IP地址:ipconfig
查看本机链接:ping
本机的回路地址:127.0.0.1 对应该地址的名称 localhost
Ipv4 4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽
Ipv6 8组,每组4个16进制数
1a2b:0000:aaaa:0000::aabb:1f2f ::代表省略的0000
端口号
计算机中应用的唯一标识 是一个虚拟的概念(总共0-65535)
0-1024端口作为系统保留
常见端口:3306 80 8080 4000 1521 21FTP 23Telnet(远程登录) 22SSH(安全登录)、SCP(文件传输)
通信协议
HTTP:协议 FTP协议 SMTP协议 TCP/UDP IP协议 WebSocket协议
数据传输
HTTP:协议 FTP协议 SMTP协议 TCP/UDP IP协议 WebSocket协议
数据传输
七层模型
OSI参考模式:开放系统互连参考模型(Open System Interconnect)
四层模型
传输控制/网际协议 Transfer Controln Protocol/Internet Protocol
InetAddress类
类信息
public class InetAddress
extends Object
implements Serializable
包含了object中的方法 并且可以进行数据传递实现了Serializable接口
使用
1.package com.mage.net;
2.
3.import java.net.InetAddress;
4.import java.net.UnknownHostException;
5.
6./**
7. * 测试InetAddress中的常用方法
8. * @author 码歌
9. * @date 创建时间 猴年马月
10. * @version 1.0
11. */
12.public class Test01 {
13.
14. public static void main(String[] args) throws UnknownHostException {
15. //获取InetAddress对象
16. InetAddress address = InetAddress.getLocalHost();
17. //输出对象信息 重写了toString
18. System.out.println(address);
19. //发送主机的名称
20. System.out.println(address.getHostName());
21. //获取主机的地址
22. System.out.println(address.getHostAddress());
23. //获取百度ip对应的dns解析域名 获取所有的ip对象
24. InetAddress []addreses = InetAddress.getAllByName("www.baidu.com");
25. for (InetAddress inetAddress : addreses) {
26. System.out.println(inetAddress);
27. }
28. //获取域名对应的ip地址
29. System.out.println(InetAddress.getByName("www.baidu.com").getHostAddress());
30. }
31.}
Socket编程
Socket
就是插座的意思,在数据传输过程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个Socket
。(socket370 socket478)
可以将Socket
理解为码头,两个码头要进行贸易,需要A港口 B港口,对应传递的数据船只就是IO流。
UDP协议:
特点
面向无连接(既可以作为收的一方 作为发送一方)
没有客户端和服务端的区分
不安全 容易丢包
数据大小有限制 64K
效率高
案例1
发送方:
1.package com. mage.net;
2.
3.import java.io.IOException;
4.import java.net.DatagramPacket;
5.import java.net.DatagramSocket;
6.import java.net.InetAddress;
7.import java.net.SocketException;
8.import java.net.UnknownHostException;
9.
10./**
11. * 通过udp协议收发消息 做本机测试
12. * 发送端
13. * @author 码歌
14. * @date 创建时间 猴年马月
15. * @version 1.0
16. */
17.public class UdpSend {
18.
19. public static void main(String[] args) {
20. try {
21. //创建对象 发送接收数据包
22. DatagramSocket send = new DatagramSocket();
23. //发送信息
24. String str = "老薛出马 一个顶俩";
25. //创建数据包对象 将数据发送到一个指定地址的指定应用服务上(port)
26. DatagramPacket packet = new DatagramPacket(
27. str.getBytes(),str.getBytes().length, InetAddress.getLocalHost(),8888);
28. //发送
29. send.send(packet);
30.
31. //发送完毕 关闭socket
32. send.close();
33. } catch (SocketException e) {
34. e.printStackTrace();
35. } catch (UnknownHostException e) {
36. e.printStackTrace();
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. }
41.}
接收方:
1.package com. mage.net;
2.
3.import java.io.IOException;
4.import java.net.DatagramPacket;
5.import java.net.DatagramSocket;
6.import java.net.SocketException;
7.import java.net.UnknownHostException;
8.
9./**
10. * 接收方
11. * @author 码歌
12. * @date 创建时间 猴年马月
13. * @version 1.0
14. */
15.public class UdpRecive {
16. public static void main(String[] args) {
17. try {
18. //创建对象 发送接收数据包
19. DatagramSocket receive = new DatagramSocket(8888);
20. //创建数据包对象 接收发送的数据信息
21. //创建接收数组
22. byte[] buf = new byte[2014];
23. DatagramPacket packet = new DatagramPacket(buf,buf.length);
24. //接收
25. receive.receive(packet);
26.
27.
28. //显示数据
29. System.out.println(new String(packet.getData(),0,packet.getLength()));
30.
31. //接收完毕 关闭socket
32. receive.close();
33. } catch (SocketException e) {
34. e.printStackTrace();
35. } catch (UnknownHostException e) {
36. e.printStackTrace();
37. } catch (IOException e) {
38. e.printStackTrace();
39. }
40. }
41.
42.}
案例2:聊天室小程序:
发送方:
1.package com. mage.net.chat;
2.
3.import java.io.BufferedReader;
4.import java.io.IOException;
5.import java.io.InputStreamReader;
6.import java.net.DatagramPacket;
7.import java.net.DatagramSocket;
8.import java.net.InetAddress;
9.import java.net.SocketException;
10.import java.net.UnknownHostException;
11.
12./**
13. * 通过udp协议收发消息 做本机测试
14. * 发送端
15. * @author 码歌
16. * @date 创建时间 猴年马月
17. * @version 1.0
18. */
19.public class UdpSend {
20.
21. public static void main(String[] args) {
22. try {
23. //创建对象 发送接收数据包
24. DatagramSocket send = new DatagramSocket();
25. //发送信息
26. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
27.
28. //读取键盘输入
29. String line = null;
30. while((line=reader.readLine())!=null){
31. if("886".equals(line))
32. return;
33. byte[] bytes = line.getBytes();
34. //创建数据包对象 将数据发送到一个指定地址的指定应用服务上(port)
35. DatagramPacket packet = new DatagramPacket(
36. bytes,bytes.length, InetAddress.getLocalHost(),8888);
37. //发送
38. send.send(packet);
39. }
40. //发送完毕 关闭socket
41. send.close();
42. } catch (SocketException e) {
43. e.printStackTrace();
44. } catch (UnknownHostException e) {
45. e.printStackTrace();
46. } catch (IOException e) {
47. e.printStackTrace();
48. }
49. }
50.}
接收方:
1.package com. shsxt.net.chat;
2.
3.import java.io.IOException;
4.import java.net.DatagramPacket;
5.import java.net.DatagramSocket;
6.import java.net.SocketException;
7.import java.net.UnknownHostException;
8.
9./**
10. * 接收方
11. * @author 老薛
12. * @date 创建时间 猴年马月
13. * @version 1.0
14. */
15.public class UdpRecive {
16. public static void main(String[] args) {
17. DatagramSocket receive = null;
18. try {
19. //创建对象 发送接收数据包
20. receive = new DatagramSocket(8888); [不能编写在while循环中 不然就会报错
Address already in use: Cannot bind]
21. while(true){
22. //创建数据包对象 接收发送的数据信息
23. //创建接收数组
24. byte[] buf = new byte[2014];
25. DatagramPacket packet = new DatagramPacket(buf,buf.length);
26. //接收
27. receive.receive(packet);
28.
29.
30. //显示数据
31. System.out.println(packet.getAddress().getHostAddress()+"发送信息:"+new String(packet.getData()));
32. }
33. } catch (SocketException e) {
34. e.printStackTrace();
35. } catch (UnknownHostException e) {
36. e.printStackTrace();
37. } catch (IOException e) {
38. e.printStackTrace();
39. }finally {
40. receive.close();
41. }
42. }
43.
44.}
今天就分享到这里,此系列后续还会更新。请持续关注。