之前写的是一个工程,server端已经有人写好了
网络编程 至少涉及两个端(两个应用程序),通过网络访问连接
这两个应用程序一般在两台电脑上(分别占用不同的IP地址和不同的端口号,通过网络相连)
IP地址决定哪台电脑
端口号决定哪个应用程序
由客户端发出请求,服务器端接收请求并响应
请求数据的为客户端
启动的时候服务器端先启动,等待客户端的访问
网络基础:计算机网络
计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络。
- 网络最主要的作用在于共享设备和传输数据。
- 无论是共享或传输数据,务必需要保证准确地匹配目的主机。
网络基础:IP地址和域名
- 为了准确地定位网络上的目标主机,网络中的每个设备都会有一个唯一的数字标识,即网络设备的IP地址。
通过IP地址,可以精确地匹配目标主机,是网络中资源共享、数据传输的依据。
例如:欲查找当前局域网内打印机,可以通过其IP地址10.7.10.200精确匹配。 - 由于IP地址不易记忆,引入网络域名来确认IP地址。
例如:域名www.baidu.com相对于119.75.218.77来说,更容易记忆。
网络基础:端口
- IP地址可以精确地确定一台主机,但是在这台主机上可能运行着多个应用程序;可以借助主机端口精确地确定客户访问的是这台主机中的哪一个应用程序。
- 在一台主机上,应用程序可以占用任何一个端口号;一旦应用程序占据这个端口号,其它应用将不能再占用该端口。
- 在主机中,端口号1~1024是系统保留端口号,用来为常用的网络服务程序所占用。用户自定义应用程序,最好占用其它端口号。
例如:HTTP服务默认占用80端口,(用于tcp传输协议)
FTP服务占用21端口,
SMTP服务占用25端口等。
网络基础:TCP/UDP协议
确定好目标主机和应用程序之后,就可以进行网络传输。网络传输过程中,数据的传递有两种最常见的形式。
- TCP传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
- 需要首先在网络两端建立安全连接,再进行数据传递,确保网络双方完整无误地传输数据。
- UDP用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
- 无需建立网络双方连接,直接发送数据包(包含目的地址信息),可能会因为网络问题导致数据传输失败等问题,但是传输速度很快,常用于局域网中传输数据。
网络编程简介
- 网络编程是指通过编程方式实现两个(或多个)设备之间的数据传输。
- 网络编程是基于==“请求-响应”==模式的:网络中某一端发出请求,另一端接收到请求后,响应请求方的请求。
- “请求方”称之为客户端,“响应方”称之为服务器端。
- 网络编程在客户端和服务器端之间传输数据可以采用TCP方式,也可以采用UDP方式。
- 网络编程开发模式
- 客户端/服务器端模式(C/S模式):对于不同的服务器端程序建立不同的客户端程序。
- 浏览器/服务器端模式(B/S模式):对于不同的服务器端程序使用统一的“客户端”(即浏览器)即可。
网络编程简介:C/S模式应用程序
在网络编程中,C/S模式应用程序的开发,需要同时开发客户端应用程序和服务器端应用程序。
客户端应用程序开发步骤(3步):
- 客户端建立与服务器端的连接(通过IP地址和端口确定服务器端程序)。建立连接
- 客户端封装请求数据,发送给服务器端;客户端获得服务器端响应数据,解析并处理数据。响应处理
- 客户端关闭网络连接。关闭
服务器端应用程序开发步骤:
- 服务器端监听特定端口。
- 服务器端接收客户端连接。
- 服务器端接收客户端请求数据,解析并处理请求数据;服务器端封装响应数据,发送给客户端端。
- 服务器端关闭网络连接。
网络编程简介:B/S模式应用程序
B/S模式应用程序的开发,由于客户端统一使用浏览器访问,只需要开发服务器端应用程序即可。
- 由于客户端使用浏览器访问,服务器端应用程序本质上属于Web应用程序;浏览器和服务器通信协议采用HTTP协议。
- Web应用程序的开发过程在后续课程中详细介绍,在此不再赘述。
Java网络编程核心类
Java语言中,实现网络编程需要使用两个核心类包。
- java.net.*:网络类包,涵盖常用网络操作类。
- java.io.*:数据消息传输包,在网络双方进行数据传递需要使用该包中的类。

(自学socket)
URL及应用
socket是底层开发
- 使用Socket进行网络编程,从网络传输层角度进行分析,适用于绝大多数网络连接方式;但是需要开发人员熟练掌握网络传输、网络协议等基础知识,开发难度较大。
- 在Java语言中,提供了一组URL处理类,封装了Socket编程技术的实现细节,用来方便开发人员进行网络连接、网络数据传输等常用的网络任务。
- 直接使用URL类,可以方便地处理各种常见协议的网络连接。
- 使用URL类进行网络连接,相当于直接进行远程输入/输出流操作,只需开发人员熟练掌握常用IO操作即可,大大降低开发难度。
URL网络编程核心操作类
URL网络编程实例:文件下载
下载服务器端文件,基本思路:
- 创建URL对象:URL url = new URL( 文件地址 );
- 获取服务器端输入流:InputStream is = url.openStream();
- 文件读写:从输入流中读取字节写入到输出流(文件)中。
URL类:统一资源定位符,指向互联网“资源”的指针。
- 常用构造方法:
URL(String url); // 通过给定字符串建立URL对象 - 常用方法:
InputStream openStream(); // 打开当前URL连接的输入流
URLConnection openConnection(); // 建立URL网络连接(建立长连接) - 详细请查看:http://docs.oracle.com/javase/7/docs/api/java/net/URL.html
url的一些get和文件下载
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
public class winsock {
//此代码为客户端
public static void main(String[] args) {
try {
URL url = new URL(
"https://img-blog.csdnimg.cn/20190115113633202.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDUyOTk5Mg==,size_16,color_FFFFFF,t_70");
System.out.println("URL主机名称:" + url.getHost());
System.out.println("URL协议:" + url.getProtocol());
System.out.println("URL端口:" + url.getPort());
System.out.println("URL文件路径:" + url.getPath());
System.out.println("URL查询字符串:" + url.getQuery());
System.out.println("URL相对路径:" + url.getRef());
System.out.println("URL文件名:" + url.getFile());
//流操作可以让外部信息出输入到应用程序
InputStream is= url.openStream();//读取
File f = new File("D:\\AD1\\小丸工具箱.jpg");
//字节流和字符流的使用条件
//字节流适用于任何情况
//字符流适用于纯文本:txt 源代码等
OutputStream ops = new FileOutputStream(f);
int r = 0;
while((r = is.read())!=-1) {
ops.write(r);
System.out.println(r);
}
} catch (Exception e) {
System.out.println("URL Exception!");
} // 传的是网络资源的地址
}
}
……
URL网络编程核心操作类
URLConnection类:应用程序和 URL 之间的通信链接,用于读取和写入此 URL 引用的资源。
- 对象建立方法:
- 通过URL对象的openConnection()方法创建
- 使用构造方法:URLConnection( URL url);
- 常用方法:
- 获得响应消息头类方法:getContentType()、getContentLength()、getContentEncoding()、
- 获得响应消息主体:getContent()
- 获得当前连接输入/输出流对象:getInputStream()、getOutputStream()
- 具体查看:http://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html
HttpURLConnection类:特定支持HTTP协议的URLConnection。
- 对象建立方法:
- 通过URL对象的openConnection()方法创建,强制转换为目标对象
- 使用构造方法:HttpURLConnection( URL url);
- 常用方法:
- 从URLConnection类继承的方法
- 针对HTTP请求响应消息的特定方法:getRequestMethod()、setRequestMethod()、getResponseCode()、getResponseMessage()、……
- 具体查看:http://docs.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html
版权声明:本文为u013140841原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。