Java基础网络编程

来源:互联网 发布:阿里设置一键上传淘宝 编辑:程序博客网 时间:2024/04/29 07:18

1:网络编程(理解)

(1)网络编程:用java代码实现多台计算机的通信。

Socket编程,套接字编程。

(2)网络模型(了解,计算机网络)

计算机网络

把多台计算机通过线路连接起来.

作用:实现资源共享和信息的传递.

ISO七层模型

应用层:应用程序

表示层:加密,解密,压缩,解压缩

会话层:通过传输层建立传输通道

传输层:定义了一些协议和端口

网络层:封装解封装IP地址

数据链路:封装为贞

物理层:网线接口类型,传输byte流数据

数据是IO流的方式传输

TCP/IP模型

(3)网络通信的三要素(掌握)

A:IP地址

唯一标识一台计算机

IP地址的概述

为了方便记忆,IP使用点分十进制计数法.

IP地址分类: IPV4(32bit),IPV6(128bit)

A类:1.0.0.0.1-127.255.255.254   10.x.x.x私有地址

B类:128.0.0.1-191.255.255.254   172.16.0.0-172.31.255.255私有地址,169.254.0.0保留地址

C类:192.0.0.1-223.255.255.254   192.168.x.x 私有地址

D类:224.0.0.1-239.255.255.254

E类:240.0.0.1-247.255.255.254

IP地址的组成

IP地址 = 网络号+主机地址

A类:256*256*256*127

B类:256*256*256

C类:256*256

特殊IP地址

127.0.0.1      本机IP地址

x.x.x.0    网络地址

x.x.x.255  广播地址

DOS命令

ipconfig    查看IP地址

ping x.x.x.x       监测网络连接

InetAddress类的使用。

static InetAddress getByName(String host)

InetAddress发现没有构造:

1) 全部是静态的.

2) 单例设计模式.

3) 通过一个静态方法,返回该类的对象.

掌握的方法:

InetAddress getByNeme(String host)    //指定的主机,返回InetAddress

InetAddress getLocalHost()  //返回本地主机

掌握的功能:

String getHostName()

String getHostArress()

 

B:端口

应用程序的逻辑标识。

物理端口:网卡口

逻辑端口:我们指的是逻辑端口

1) 每个网络程序至少有一个

2) 由于标识进程的逻辑地址

3) 有效端口0-65535,0-1024系统保留端口

C:协议

通信的规则。

 

UDP:

面向无连接。

数据不可靠。

数据速度快。

大小有限制。

 

举例:

凌波发数据,群发短信

TCP:

面向连接。

数据可靠。

数据速度慢。

大小无限制。

 

举例:

打电话

(4)Socket对象:(理解)

应用程序的通信,其实就是在Socket对象间通过IO进行数据的交互。

用于描述IP地址和端口,每个服务打开一个Socket,并绑定一个端口,不同的端口对应不同的服务.

通信两端都有Socket.

网络通信其实就是Socket间的通信.

数据通过两个Socket间通过IO传输.

 

(5)UDP协议(理解 参照UDP发送接收数据图)

发送数据

A:创建UDP协议发送数据的Socket对象。

B:创建数据并打包。

C:发送数据。

D:释放资源

 

代码体现:

//-------------创建UDP协议发送数据的Socket对象-----------

//创建Socket对象

DatagramSocket ds = new DatagramSocket();

 

//-------------创建数据并打包--------------

//创建数据

String str = "Hello,UDP,我来了!";

//数据转换成字节数组保存

byte[] bys = str.getBytes();

//定义ip地址

InetAddress address = InetAddress.getByName("192.168.1.113");

//封装数据

DatagramPacket dp = new DatagramPacket(bys,bys.length,address,10000);

 

//-----------------发送数据----------------

//发送数据

ds.send(dp);

 

//-----------------释放数据-----------------

//释放资源

ds.close();

 

接收数据

A:创建UDP协议接收数据的Socket对象。

B:创建数据包用于接收数据。

C:接收数据,并解析数据。

D:释放资源。

 

代码体现:

//-----------------创建UDP协议接收数据的Socket对象-----------------

DatagramSocket ds = new DatagramSocket(10000);

 

//-----------------创建数据包用于接收数据-----------------

//创建数组存储数据

byte[] bys = new byte[1024];

//创建数据包接收数据

DatagramPacket dp = new DatagramPacket(bys,bys.length);

 

//-----------------接收数据,并解析数据-----------------

//接收数据

ds.receive(dp);

//解析数据包

byte[] by = dp.getData();

//获取数据的实际长度

int len = dp.getLength();

//将数组的内容转换成String数据

String data = new String(by,0,len);

//控制台打印

System.out.println("Client:"+ data);

 

//-----------------释放资源-----------------

ds.close();

 

(6)TCP协议(理解 参照TCP发送接收数据图)

客户端

A:创建客户端Socket对象。

B:获取输出流对象

C:使用输出流对象输出数据。

D:释放资源

 

代码体现:

//--------------创建Socket对象--------------

Socket s = new Socket("192.168.1.113",10086);

 

//--------------创建输出流对象--------------

OutputStream os = s.getOutputStream();

 

//创建数据

String data = "TCP,我来了!";

 

//--------------使用输出流输出数据--------------

os.write(data.getBytes());

 

//--------------释放资源--------------

s.close();

 

服务器端(TCP程序一定要先运行服务端,后运行client.)

A:创建服务器Socket对象。

B:监听并获取客户端对象。

C:获取输入流。

D:根据输入流读取数据。

E:释放资源

 

代码体现:

//--------------创建服务端Socket对象--------------

ServerSocket ss = new ServerSocket(10086);

 

//--------------监听并获取客户端对象--------------

Socket s = ss.accept();

 

//--------------获取输入流--------------

InputStream is = s.getInputStream();

 

//--------------根据输入流获取数据--------------

byte[] bys = new byte[1024];

//解析数据,将数据保存到bys数组并返回数组长度

int len = is.read(bys);

//数组装换成String数据

String data = new String(bys,0,len);

//控制台打印数据

System.out.print("Data is:"+data);

 

//--------------释放资源--------------

s.close();

ss.close();

}

 

原创粉丝点击