java计算机网络从基础到入门.docx

上传人:b****6 文档编号:8430525 上传时间:2023-01-31 格式:DOCX 页数:13 大小:146.59KB
下载 相关 举报
java计算机网络从基础到入门.docx_第1页
第1页 / 共13页
java计算机网络从基础到入门.docx_第2页
第2页 / 共13页
java计算机网络从基础到入门.docx_第3页
第3页 / 共13页
java计算机网络从基础到入门.docx_第4页
第4页 / 共13页
java计算机网络从基础到入门.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

java计算机网络从基础到入门.docx

《java计算机网络从基础到入门.docx》由会员分享,可在线阅读,更多相关《java计算机网络从基础到入门.docx(13页珍藏版)》请在冰豆网上搜索。

java计算机网络从基础到入门.docx

java计算机网络从基础到入门

1、计算机网络

●指分布在不同地域的计算机,通过外部设备连接起来,实现了资源共享与数据传输的计算机系统。

Extends:

IP

●IP地址

•Internet上的每台主机(Host)都有一个唯一的IP地址。

IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。

例如159.226.1.1。

(四个字节)

●IP地址类别

•IP地址是由网络号和主机号组成

•A类地址:

8位网络位,24位主机位

•B类地址:

16位网络位,16位主机位

•C类地址:

24位网络位,8位主机位

●特殊的IP地址

127.0.0.1表示本机回环地址

Extends:

Port

●Port地址

•如果把IP地址比作一间房子,端口就是出入这间房子的门。

真正的房子只有几个门,但是一个IP地址的端口可以有65536(即:

2^16)个之多!

端口是通过端口号来标记的,端口号只有整数,范围是从0到65535(2^16-1)。

●Port分类(0~65535)

•公认端口(WellKnownPorts):

从0到1023,它们紧密绑定(binding)于一些服务。

•注册端口(RegisteredPorts):

从1024到49151。

它们松散地绑定于一些服务。

•动态和/或私有端口(Dynamicand/orPrivatePorts):

从49152到65535。

●常用端口

•21FTP

•80HTTP

•443HTTPS

Extends:

协议

●TCP:

TransmissionControlProtocol传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transportlayer)通信协议。

●特点:

•面向连接的协议,数据传输必须要建立连接,所以在TCP中需要连接时间。

•传输数据大小限制,一旦连接建立,双方可以按统一的格式传输大的数据。

•一个可靠的协议,确保接收方完全正确地获取发送方所发送的全部数据。

●UDP:

UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

●特点:

•每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。

•UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。

•UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

Extends:

通信要素

Java网络编程

●Java网络编程

•Java网络编程其实就是实现局域网或互联网之间的数据通信(数据传输)。

●Java网络编程要素

•通过前面的知识,大家知道了计算机之间的数据传输需要三个要素。

•IP(主机名)、端口、协议

•Java是OOP语言,所以将其封装为特定的对象,.*

●对象映射

•IP主机名(InetAddress)

•端口数字标识不用封装为对象

InetAddress

●InetAddress

•此类表示互联网协议(IP)地址。

●功能

•getLocalHost()

•getHostAddress()

•getHostName()

•getByName(Stringhost)

•getAllByName(Stringhost)

●细节

•使用getByName(Stringhost)通过一个IP地址找主机时,如果IP和Address没有对应在公网上,那么该IP解析不了对应的地址,而且显示为对应IP且查询很慢。

•可以getByName(Stringhost)找出域名对应的IP,getAllByName()可以获取多个地址。

UDP和TCP协议

●UDP

•将数据极其源和目的封装为数据包,不需要建立连接。

•每个数据包大小限制在64K中

•因为无连接,所以不可靠

•因为不需要建立连接,所以速度快

如:

人说话、飞秋、凌波、CS等

●TCP

•面向连接,有特有的通道

•在连接中传输大数据量

•通过三次握手机制连接,可靠协议

•通信前必须建立连接,效率稍低

如:

打电话,文件的传送.

Extends:

三次握手机制

Socket编程(网络编程)

●Socket

•socket的英文原义是“孔”或“插座”。

作为4BDSUNIX的进程通信机制,取后一种意思。

通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄(引用)。

•每个插座就是一个应用程序。

●细节

•不同的通信规则需要定义不同的插座。

•UDP:

DatagramSocket、DatagramPacket

•TCP:

ServerSocket、Socket

UDP数据传输

●UDP数据传输

•DatagramSocket与DatagramPacket

•建立发送端,接收端

•建立数据包

•调用Socket的发送接收方法

•关闭Socket

●注意

•发送端与接收端是两个独立的运行程序

•发送端发送数据的端口是随机的

•IDE中的控制台切换

UDP发送端

●在发送端,要在数据包对象中明确目的地IP及端口。

●DatagramSocketsocket=newDatagramSocket();

●byte[]bs="helloWorld".getBytes();

●InetAddressadress=InetAddress.getByName("127.0.0.1");

●intport=5800;

●DatagramPacketpack=newDatagramPacket(bs,bs.length,adress,port);

●socket.send(pack);

●socket.close();

●在接收端,要指定监听的端口。

●DatagramSocketsocket=newDatagramSocket(5800);

●byte[]bs=newbyte[1024];

●DatagramPacketpack=newDatagramPacket(bs,bs.length);

●socket.receive(pack);

●InetAddressadress=pack.getAddress();

●byte[]b=pack.getData();

●intport=pack.getPort();

●System.out.println(adress);

●System.out.println(port);

●System.out.println(newString(b,0,b.length));

●socket.close();

●修改代码,使得接受者可以连续接收发送者发送的数据

●修改代码,使得发送的数据是可变的,如可以从控制台上输入

●DatagramSocketsocket=newDatagramSocket(10001);

●while(true){

●byte[]bs=newbyte[1024];

●DatagramPacketpack=newDatagramPacket(bs,bs.length);

●socket.receive(pack);

●InetAddressadress=pack.getAddress();

●byte[]b=pack.getData();

●intport=pack.getPort();

●System.out.print(adress+"");

●System.out.print(port+"");

●System.out.println(newString(b,0,b.length));

●}

键盘接收数据的发送端

publicstaticvoidmain(String[]args)throwsException{

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

Stringstr=null;

DatagramSocketsocket=newDatagramSocket();

DatagramPacketpack=null;

byte[]bs=null;

while((str=br.readLine())!

=null){

if(str.equals("finish"))

break;

bs=str.getBytes();

pack=newDatagramPacket(bs,bs.length,InetAddress.getByName("127.0.0.1"),10001);

socket.send(pack);

}

socket.close();

}

一个网络段中有两个地址不能使用,一个是0一个就是255,如:

192.168.10.0代表一个网络地址,192.168.10.255代表广播地址。

所以可以改变数据包的目的地址实现群聊功能。

TCP数据传输

●TCP数据传输

•ServerSocket和Socket

•建立客户端和服务器端

•建立连接后,通过Socket中的IO流进行数据的传输

•关闭socket

●注意

•同样,客户端与服务器端是两个独立的应用程序。

TCP客户端

●通过Socket建立对象并指定要连接的服务端主机以及端口。

●publicstaticvoidmain(String[]args)throwsException{

●Socketsocket=newSocket("127.0.0.1",10000);

●OutputStreamout=socket.getOutputStream();

●out.write("你好".getBytes());

●socket.close();

●}

●建立服务端需要监听一个端口

●publicstaticvoidmain(String[]args)throwsException{

●ServerSocketserver=newServerSocket(10000);

●Socketsocket=server.accept();

●InputStreamin=socket.getInputStream();

●byte[]b=newbyte[1024];

●intlen=0;

●while((len=in.read(b))!

=-1){

●System.out.println(socket.getInetAddress().getHostAddress()+":

●+newString(b,0,len));

●}

●server.close();

●}

●在上面程序上实现互相的输入和输出

●publicstaticvoidmain(String[]args)throwsException{

●Socketsocket=newSocket("127.0.0.1",10000);

●OutputStreamout=socket.getOutputStream();

●out.write("你好".getBytes());

●InputStreamin=socket.getInputStream();

●byte[]b=newbyte[1024];

●intlen=0;

●len=in.read(b);

●System.out.println(newString(b,0,len));

●socket.close();

●}

Extends

publicstaticvoidmain(String[]args)throwsException{

ServerSocketserver=newServerSocket(10000);

Socketsocket=server.accept();

InputStreamin=socket.getInputStream();

byte[]b=newbyte[1024];

intlen=0;

len=in.read(b);

System.out.println(socket.getInetAddress().getHostAddress()+":

+newString(b,0,len));

OutputStreamout=socket.getOutputStream();

out.write("我收到了....".getBytes());

server.close();

}

BS开发

publicstaticvoidmain(String[]args)throwsException{

ServerSocketserver=newServerSocket(11000);

Socketsocket=server.accept();

OutputStreamout=socket.getOutputStream();

out.write("

客户端你好!

!

".getBytes());

out.close();

System.out.println(socket.getInetAddress().getHostAddress());

server.close();

}

FeiQDemo.java

packagecn.itcast.udp;

importjava.io.IOException;

import.DatagramPacket;

import.DatagramSocket;

import.InetAddress;

import.UnknownHostException;

importjava.util.Date;

/*

使用udp协议给feiQ发送信息。

每一个网络通讯程序,都处理自己制定格式的数据,不会任何的格式数据都处理的。

(加密)

version:

time:

sender:

ip:

flag:

content;

版本:

时间:

发送者:

IP:

标识:

内容;

32

udp协议中有一个ip地址称作为广播地址,广播地址就是主机号为255的,如果发送消息的时候是往广播地址发送,那么在同一个网络号的人都可以收到信息。

*/

publicclassFeiQDemo{

publicstaticvoidmain(String[]args)throwsIOException{

//第一步:

建立udp的服务

DatagramSocketdatagramSocket=newDatagramSocket();

//第二步:

准备数据,然后把数据封装到数据包中,

Stringdata=getData("feiQ你好");

DatagramPacketdatagramPacket=newDatagramPacket(data.getBytes(),data.getBytes().length,InetAddress.getByName("192.168.10.255"),2425);

//第三步:

调用udp的服务发送数据

datagramSocket.send(datagramPacket);

//关闭资源

datagramSocket.close();

}

//把数据组装成feiQ处理的格式数据

publicstaticStringgetData(Stringdata){

StringBuildersb=newStringBuilder();

sb.append("1.0:

");

sb.append(System.currentTimeMillis()+":

");

sb.append("李克强:

");

sb.append("192.168.10.100:

");

sb.append("32:

");

sb.append(data);

returnsb.toString();

}

}

ServerSocket没有设计获取流对象的方法

Udp的数据包丢失

服务器与浏览器的原理

计算机网络

三次握手机制

网络通信的三要素

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1