Java基础学习(六) 网络编程简介

基础知识:
1、osi分层模型和TCP/IP分层模型对应关系

2、七层模型与协议的对应关系
网络层 ------------ IP(网络之间的互联协议)
传输层 ------------ TCP(传输控制协议)、UDP(用户数据报协议)
应用层 ------------ Telnet(Internet远程登录服务的标准协议和主要方式)、FTP(文本传输协议)、HTTP(超文本传送协议)

3、IP地址和端口号
1、ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,必须使用IP地址来进行标示。
2、ip地址唯一标示了通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务。这个时候就要通过端口来区分开具体的通信程序。一个通信实体上不能有两个通信程序使用同一个端口号。

4、TCP和UDP
1、TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。它能够提供两台计算机之间的可靠的数据流,HTTP、FTP、Telnet等应 用都需要这种可靠的通信通道。
2、UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送目的地,至于能够达到目的地,达到目的地的时 间以及内容的正确性都是不能保证的。

TCP和UDP差异:
1、可靠的传输是要付出代价的,对数据内容的正确性的检验必然会占用计算机处理时间和网络带宽。因此TCP的传输效率不如UDP高。
2、许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求视频音频数据绝对正确,只要能够连贯就可以了。所以在这些场景下,使用UDP更合适些。

5、URL
1、URL对象代表统一资源定位器,是指向互联网“资源”的指针。它是用协议名、主机、端口和资源组成,即满足如下格式:
protocol://host:port/resourceName
http://www.crazyit.org/index.php
2、通过URL对象的一些方法可以访问该URL对应的资源:
String getFile():获取该URL的资源名
String getHost():获取主机名
String getPath():获取路径部分
int getPort():获取端口号
public static void main(String[] args) throws IOException
{
URL url = new URL("https://i.cnblogs.com/EditPosts.aspx?opt=1");
String file = url.getFile();
String host = url.getHost();
int port = url.getPort();
String query = url.getQuery();
String protocol = url.getProtocol();
}
URL最重要的两个方法:openConnection()、openStream()
public static void main(String[] args) throws IOException
{
URL url = new URL("http://www.baidu.com");
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
OutputStream os = new FileOutputStream("c:/data.txt");
byte[] buffer = new byte[1024];
int flag = 0;
while (-1 != (flag = is.read(buffer, 0, buffer.length)))
{
os.write(buffer, 0, flag);
}
os.close();
is.close();
}

1、代码第4行openConnection()该方法用于返回URLConnection对象,表示到URL所引用的远程连接。
2、代码第5行getInputStream方法,用于返回从此打开的连接读取的输入流。
3、后面的代码就是我们已经很熟悉的从输入流中读到数据,再通过输出流写入文件。
4、执行的结果就是我们通过浏览器访问http://www.baidu.com,百度服务器返回的内容。
5、这里是文本文件,我们将后缀修改为html,然后用浏览器访问,这样看起来更直观:

6、InetAddress
JAVA提供了InetAddress类来代表IP地址。

public static void main(String[] args) throws IOException
{
InetAddress address = InetAddress.getLocalHost();
System.out.println(address);
address = InetAddress.getByName("www.baidu.com");
System.out.println(address);

}
1 WINDOWS-EC813QQ/192.168.88.1
2 www.baidu.com/115.239.211.112

7、Socket网络通信
Socket又称套接字,是连接运行在网络上两个程序间的双向通讯的端点。

使用Socket进行网络通信的过程
服务端:服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端的连接请求。
客户端:客户端程序根据你服务器所在的主机名和端口号发出连接请求。
两者之间的通信是通过Socket完成的,我们可以认为Socket是两个城市之间的交通工具,有了它,就可以在两个城市之间穿梭了。

主机A的应用程序和主机B的应用程序通信,必须通过Socket建立连接,而建立Socket必须由底层的TCP/IP协议来建立TCP连接。建立TCP连接需要底层IP协议来寻址网络中的主机。IP地址只能帮助我们找到目标主机,但是一个主机上面有多个应用程序,如何才能找到我们需要的应用程序,这个时候就可以通过端口号来指定了。

简易服务端、客户端模拟,样例:
服务器端:
public class ServerTest {
public static void main(String[] args) throws IOException {
//创建一个ServerSocket,用于监听客户端Socket连接请求
ServerSocket ss = new ServerSocket(9999);
System.out.println("server start");
//采用循环方式监听客户端的请求
while (true) { //侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。
Socket socket = ss.accept();
//获取客户端的信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
System.out.println(str);
//向客户端发送信息
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.print("服务端 -> 客户端");
ps.close();
os.close();
br.close();
is.close();
socket.close();
}
}
}

客户端:
public class Client{
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 9999);
//向服务器发信息
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("客户端->服务端");
//读取服务器发送的信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = br.readLine();
System.out.println(str);
br.close();
is.close();
socket.close();
}

}

原文地址:https://www.cnblogs.com/KaKa-King/p/9559681.html

时间: 2024-08-15 14:13:01

Java基础学习(六) 网络编程简介的相关文章

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

java基础学习总结——GUI编程(二)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class TestActionEvent { 7 public static void main(String args[]) { 8 Frame f = new Frame("

Java:进阶学习(1)——网络编程

Java:进阶学习(1)--网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket方法 getInetAddress();    远程服务端的IP地址 getPort();    远程服务端的端口 getLocalAddress()    本地客户端的IP地址 getLocalPort()    本地客户端的端口 getInputStream();   

java基础学习总结——GUI编程(一)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(一) 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Cont

Java基础篇Socket网络编程中的应用实例

说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法. 要求:客户端通过Socket通信技术上传本地一

JAVA基础知识之网络编程——-网络基础(多线程下载,get,post)

本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web资源,URLDecode和URLEncode用来转换字符串. 本文会写两个例子来演示java网络编程的一些基本用法. 第一个例子,写一个程序用来模拟多线程下载. 本例中用到的技术有,多线程--多个线程同时读文件写文件,可以加快下载速度, 线程池--在本例中线程池不是必须,甚至是多余,只不过是为了演示

java基础9:网络编程

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

java基础11( 网络编程)

网络编程三要素 IP:一个计算机的标识 端口:应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中0~1024系统使用或保留端口. 协议:两种协议(UDP,TCP) 特殊IP地址:127.0.0.1本地回环地址用来做一些本地测试 pingIP地址; 用来检测本机是否可以和指定的IP地址的计算机可以进行正常通讯 ipconfig     用来查看IP地址 xxx.xxx.xxx.255  广播地址 端口: 物理端口:物理设备对应的端口, 网卡口 逻辑端口:用来标示我们的计算机上的

java基础学习总结——GUI编程(二) 未学习

一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class TestActionEvent { 7 public static void main(String args[]) { 8 Frame f = new Frame("TestActionEvent"); 9 Button btn = new Button(&qu

java基础学习总结——GUI编程(一) 还未仔细阅读

一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Container里面又分为Window和Pannel,Window是可以独立显示出来的,平时我们看到的各种各样的