`

java编程-网络编程

阅读更多
网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模宏大、功能强大的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。

计算机的联网可以实现:
使用远程资源
共享信息、程序和数据
分布处理

按照网络规模和范围可以简单划分为:
局域网(LAN,Local Area Network)
都市网(MAN,Metropolis Area Network)
广域网(WAN,Wide Area Network)
按照网络拓扑结构可以分为:
星型网络、总线网络、环线网络、树型网络、星型环线网络等
按照传输介质划分:
双绞线、同轴电缆、光导纤维、视线介质等

专用服务器结构(Server-Based)
又称为“工作站/文件服务器”结构,由若干台微机工作站与一台或多台文件服务器通过通信线路连接起来组成工作站存取服务器文件,共享存储设备。
客户机/服务器模式(client/server)
其中一台或几台较大的计算机集中进行共享数据库的管理和存取,称为服务器,而将其它的应用处理工作分散到网络中其它微机上去做,构成分布式的处理系统。  
对等式网络:(Peer-to-Peer)
在对等式网络结构中,没有专用服务器 每一个工作站既可以起客户机作用也可以起服务器作用。

Internet的形成和发展:
第一阶段(1969~1983):1969年,美国ARPANET诞生,用于将几个军事及研究用的主机联系起来。1983年,TCP/IP应用到ARPANET中,使得internet得以迅速发展。以ARPANET 为中心,组成新的互联网(internet),称为Internet。
第二阶段(1983~1994):用于教育和科研领域的NSFNET(National Science Foundation Net)形成
第三阶段(1994~Now):Internet的商业化运作。

网络通信协议
  计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。 
网络通信结构
   为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间 能进行信息交换。接口包括两部分:
硬件装置:实现结点之间的信息传送
软件装置:规定双方进行通信的约定协议

OSI:开放系统互连(Open System Interconnection),采用分层的结构化技术。
分层的理由:
将网络简化
模块化的设计网络
OSI参考模型(OSI/RM,Open System Interconnection/Reference Model)共分为7层,最高层为用户层,最底层为物理层。
TCP协议为一种可靠的端对端协议:重发一切没有收到的数据,进行数据内容准确性检查并保证分组的正确顺序。

TCP协议位于OSI参考模型的传输层
IP协议是网络上的计算机进行连接的基础
IP协议是不可靠的:无论传送正确与否都不进行检验、不回送确认、不保证分组的正确顺序
IP协议位于OSI参考模型的网络层
TCP/IP:是Internet上不同系统之间互联的一组协议。它为分散和不同类型的硬件提供了一个通用的编程接口。TCP/IP 协议使Internet尽可能成为一个分散、无序的网络。
TCP/IP通常被看成一个4层模型:应用层、传输层、网络层以及数据链路层+物理层。



数据的封装和拆封:
位于TCP/IP各个层的数据通常用一个公共的机制来封装:定义描述元信息和数据报的部分真实信息的报头的协议,这些元信息可以是数据源、目的地和其他的附加属性。来自于高层的协议封装在较低层的数据报中,当信息在不同的层之间传递时,都会在每一层重新构建一次。

IP地址的分配:
IP地址的定义
为了实现Internet上不同计算机之间的通信,每台计算机都必须有一个不与其它计算机重复的地址---IP地址
IP地址是数字型的,32位(32bit),由4个 8位的二进制数组成,每8位之间用圆点隔开
网络标识(network id)和主机标识 (host id)
IP地址被分成了A、B、C、D、E五类,每个类别的网络标识和主机标识各有规则。

网络IP地址的构成:



常见 TCP 端口和对应服务
端口 对应服务
7 Echo服务器
21 Ftp
23 telnet
25 SMTP
53 DNS
79 Finger
80 HTTP
110 POP3
端口:
计算机与外界交流的出入口
是一种抽象的软件结构,包括一些数据结构和I/O(基本输入/输出)缓冲区
端口号可以从0到65535,通常将它分为三类:
公认端口(Well Known Ports):从0到1023,它们紧密绑定(Binding)一些服务
注册端口(Registered Ports):从1024到49151。它们松散地绑定一些服务
动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口

在命令行中,可以通过“ping [host]”的方法得到指定主机的IP地址
通过java.net中的InetAddress类,可以得到指定主机的IP地址
如果没有指定机器,则将会返回本地主机的IP地址
InetAddress ia = InetAddress.getLocalHost();
InetAddress ia = InetAddress.getByName(“YourComputerName”);


实例:
http服务器实例:
ServerSocket server =new ServerSocket(123);
//等待客户端连接
Socket socket=server.accept();
System.out.println("----------------------------");
//如果客户端在请求当前服务器的时候发送的有其他信息
//那么我们就可以通过当前的socket获取到客户端的请求信息
InputStream is= socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String str=null;
//不断循环接受客户端发过来的请求信息
// while(!"".equals(str=br.readLine())){
// System.out.println(str);
// }
//接受到客户端的第一句请求信息
str=br.readLine();
System.out.println("客户端的第一句请求信息是:"+str);
//将第一句请求信息以“ ”分成三部分
String[] ss=str.split(" ");
//取到截取后的第二部分
String s=ss[1];
System.out.println("请求信息第一句的第二部分是:"+s);
String sss=s.substring(1);

//sss就是客户端请求的文件
FileInputStream fis=new FileInputStream("D:/p/"+sss);
OutputStream os=socket.getOutputStream();
byte[] b=new byte[1024];
int len;
while((len=fis.read(b))!=-1){
os.write(b, 0, len);
os.flush();
}

fis.close();
socket.close();
模拟浏览器:
//创建一个请求去请求百度:模拟浏览器
Socket socket=new Socket("www.baidu.com",80);
//当我们的浏览器和百度建立连接之后,要自动给百度发送请求信息
PrintWriter pw=new PrintWriter(socket.getOutputStream());
//GET / HTTP/1.1
//Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
//Accept-Language: zh-cn
//Accept-Encoding: gzip, deflate
//User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
//Host: 172.16.36.30
//Connection: Keep-Alive
//

pw.println("GET / HTTP/1.1");
pw.println("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
pw.println("Accept-Language: zh-cn");
pw.println("Accept-Encoding: gzip, deflate");
pw.println("User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)");
pw.println("Host: www.baidu.com");
pw.println("Connection: Keep-Alive");
pw.println("");
pw.flush();
//当请求信息发送完成之后,等待百度发回来的响应信息,并且获取到响应信息
// BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
// String s=null;
// while((s=br.readLine())!=null){
// System.out.println(s);
// }
//获取到百度的信息以字节流形式写入文件
InputStream is=socket.getInputStream();
FileOutputStream fos=new FileOutputStream("D:/baidu.html");
byte[] b=new byte[1024];
int len=-1;
while((len=is.read(b))!=-1){
fos.write(b,0,len);
fos.flush();
}
UDP协议
DatagramPacket/DatagramSocket类:
实例:
public static void main(String[] args) {
//创建一个DatagramSocket对象用于接收数据报
try {
DatagramSocket socket=new DatagramSocket(12);

//创建一个空的数据报来接收数据
byte[] b=new byte[1024];
DatagramPacket packet=new DatagramPacket(b, b.length);

socket.receive(packet);

System.out.write(b);

//当我们在接收数据报时候,我们通常使用不带主机和port的DatagramPacket以及带有port的DatagramSocket
} catch (Exception e) {
e.printStackTrace();
}

}
public static void main(String[] args) {
try {
//DatagramPacket:负责构造数据报
//DatagramSocket:负责将构造好的数据报发送
//如何构造一个数据报?--->如何创建一个DatagramPacket对象
String msg="你好---java";
byte[] b=msg.getBytes();
DatagramPacket packet1=new DatagramPacket(b, b.length);

InetAddress  addr = InetAddress.getByName("172.16.36.72");
DatagramPacket packet2=new DatagramPacket(b,b.length,addr,12);

//如何将数据报发出去?--->  如果创建一个DatagramSocket对象
DatagramSocket socket1=new DatagramSocket();
DatagramSocket socket2=new DatagramSocket(123,addr);

//如果数据报中不包含目标主机和端口号,我们就需要通过带有目标主机和端口号的DatagramSocket对象发送
//如果数据报中包含目标主机和端口号,我们就采用不带有目标主机很port的DatagramSocket对象发送
socket1.send(packet2);
//当我们需要发送数据报时候,我们通常使用带主机和port的DatagramPacket,以及不带主机和端口号的DatagramSocket

} catch (Exception e) {
e.printStackTrace();
}
}
飞秋应用:
import java.io.IOException;
import java.net.*;
/**
* 飞秋发送。。。
* @author Administrator
*
*/
public class SendFQ {
public static void main(String[] args) {
try {
//构造数据报
byte[] b="1:100:用户名:主机名:32:随机的。。。。".getBytes();
InetAddress  addr = InetAddress.getByName("172.16.36.72");
DatagramPacket packet=new DatagramPacket(b, b.length, addr, 2425);
DatagramSocket socket=new DatagramSocket();
//将数据报发出去
socket.send(packet);
} catch (Exception e) {
e.printStackTrace();
}
}

}
交换机:
MulticastSocket类:
实例:
public class Send {
public static void main(String[] args) {
try {
InetAddress addr=InetAddress.getByName("228.5.6.7");
MulticastSocket ms=new MulticastSocket();
ms.joinGroup(addr);//交换机

String msg="多播信息";
byte[] b=msg.getBytes();
DatagramPacket packet=new DatagramPacket(b, b.length,addr,6789);
ms.send(packet);


} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

}
public class Receive1 {

public static void main(String[] args) {
//因为发送者把数据发送到一个交换机
try {
InetAddress addr=InetAddress.getByName("228.5.6.7");

//创建一个MulticastSocket
MulticastSocket ms1=new MulticastSocket(6789);
ms1.joinGroup(addr);

byte[] b=new byte[100];
DatagramPacket packet=new DatagramPacket(b, b.length);
ms1.receive(packet);
int len=packet.getLength();
System.out.write(b,0,b.length);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Receive2 {
public static void main(String[] args) {
try {
InetAddress addr=InetAddress.getByName("228.5.6.7");

//创建一个MulticastSocket
MulticastSocket ms2=new MulticastSocket(6789);
ms2.joinGroup(addr);

byte[] b=new byte[100];
DatagramPacket packet=new DatagramPacket(b, b.length);
ms2.receive(packet);
int len=packet.getLength();
System.out.write(b,0,b.length);
} catch (Exception e) {
e.printStackTrace();
}
}

}
原理:


URL类:
下载资源实例:



非阻塞通信:


  • 大小: 15.7 KB
  • 大小: 35.9 KB
  • 大小: 49.2 KB
  • 大小: 36 KB
  • 大小: 58.3 KB
分享到:
评论

相关推荐

    少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-基于ssm的少儿编程系统-少儿编程管理系统java代码-少儿编程代码

    少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-少儿编程管理系统java代码-少儿编程系统设计与实现-基于ssm的少儿编程系统-基于Web的少儿编程系统设计与实现-少儿编程网站-少儿编程网站代码-少儿编程平台...

    基于Java--Socket-网络编程.doc

    基于Java--Socket-网络编程.doc

    深圳大学-java程序设计--网络编程应用.docx

    Java 网络编程应用实验报告 本实验报告的主要目的是掌握网络通信协议及相关程序设计。实验要求完成两个任务:(1)利用数据报通信方式编写程序,生成两个客户端,一个服务器端,两个客户端可以相互进行简短的文字...

    java编程-socket-套接字-网络编程.docx

    ### Java编程中的Socket与网络编程详解 #### 一、Socket编程概述 Socket编程是Java网络编程的核心技术之一,主要用于实现不同计算机之间的通信。通过Socket,应用程序可以在网络上发送和接收数据,实现分布式系统...

    Java语言编程-网络编程

    通过学习这些基本概念和技术,开发者能够更好地利用Java进行网络编程,构建出高效稳定的网络应用程序。 #### 七、扩展阅读 - [官方文档](https://docs.oracle.com/javase/tutorial/networking/sockets/) - [Socket...

    少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-基于Web的少儿编程系统设计与实现-少儿编程系统设计与实现-java

    少儿编程-少儿编程系统-少儿编程系统源码-少儿编程管理系统-少儿编程管理系统java代码-少儿编程系统设计与实现-基于ssm的少儿编程系统-基于Web的少儿编程系统设计与实现-少儿编程网站-少儿编程网站代码-少儿编程平台...

    62-Java并发编程实战

    62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java并发编程实战62-Java...

    Java Web项目-编程爱好者博客地带.zip

    Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-编程爱好者博客地带Java Web项目-...

    《Java程序设计之网络编程》

    《Java程序设计之网络编程》是一本专注于Java网络编程的教材,它涵盖了网络通信的基础理论以及Java语言在实现网络应用中的各种技术。该资源包括课件和源码,旨在帮助学习者通过实践来深入理解Java网络编程的核心概念...

    Java网络编程-第三版(中文版).pdf(Elliotte Rusty Harold)

    通过阅读《Java网络编程》第三版,开发者可以全面掌握Java在构建网络应用程序时的各种技术和策略,提升自己的网络编程能力,为开发高质量的网络应用打下坚实基础。书中丰富的示例代码和实践指导将帮助读者更好地理解...

    java网络编程--qq聊天程序源代码

    这个程序利用了Java的网络编程能力,允许用户进行即时通讯,类似于我们熟知的QQ聊天软件。 首先,让我们深入了解一下Java在网络编程方面的基础。Java提供了Socket编程接口,它基于TCP/IP协议,能够建立可靠的、双向...

    华科-计算机网络实验报告-Java Socket编程-网络组建实验.docx

    Java Socket 编程是计算机网络实验中的一个重要组成部分,它允许开发者创建可以在网络上传输数据的应用程序。下面是关于 Java Socket 编程在计算机网络实验中的应用的知识点总结。 Java Socket 编程简介 Java ...

    Java网络编程案例教程习题参考答案 .pdf

    Java_network_programming是Java编程语言中一个基础组件,用于实现网络通信。以下是Java网络编程案例教程习题参考答案中涉及到的知识点: 1. Socket编程:Socket是Java网络编程中最基本的组件,用于实现网络通信。...

    Java网络编程/Java网络编程实例

    Java网络编程是Java开发中的重要领域,它涵盖了网络应用程序的设计、实现和调试。在这个主题下,我们可以探讨多个关键知识点: 1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过...

    16.java-网络编程.md

    16.java-网络编程

    java论文-网络通信java论文-网络通信

    本文主要探讨了使用Java编程语言进行网络通信程序的开发,重点关注了SOCKET机制、输入/输出流的使用以及Java在网络编程中的优势。以下是对这些知识点的详细阐述: 1. **Java输入/输出流**: Java的输入/输出流(I/...

Global site tag (gtag.js) - Google Analytics