tcp网络编程

TCP网络编程

计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络。
网络最主要的作用在于共享设备和传输数据。
无论是共享或传输数据,务必需要保证准确地匹配目的主机

网络基础:IP地址和域名
为了准确地定位网络上的目标主机,网络中的每个设备都会有一个唯一的数字标识,即网络设备的IP地址。
由于IP地址不易记忆,引入网络域名来确认IP地址

网络基础:端口
IP地址可以精确地确定一台主机,但是在这台主机上可能运行着多个应用程序;可以借助主机端口精确地确定客户访问的是这台主机中的哪一个应用程序。
在一台主机上,应用程序可以占用任何一个端口号;一旦应用程序占据这个端口号,其它应用将不能再占用该端口。
在主机中,端口号1~1024是系统保留端口号,用来为常用的网络服务程序所占用。用户自定义应用程序,最好占用其它端口号。

网络基础:TCP/UDP协议
确定好目标主机和应用程序之后,就可以进行网络传输。网络传输过程中,数据的传递有两种最常见的形式。
TCP传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
需要首先在网络两端建立安全连接,再进行数据传递,确保网络双方完整无误地传输数据。
UDP用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
无需建立网络双方连接,直接发送数据包(包含目的地址信息),可能会因为网络问题导致数据传输失败等问题,但是传输速度很快,常用于局域网中传输数据。

网络编程是指通过编程方式实现两个(或多个)设备之间的数据传输。
网络编程是基于“请求-响应”模式的:网络中某一端发出请求,另一端接收到请求后,响应请求方的请求。
“请求方”称之为客户端,“响应方”称之为服务器端。
网络编程在客户端和服务器端之间传输数据可以采用TCP方式,也可以采用UDP方式。
网络编程开发模式
客户端/服务器端模式(C/S模式):对于不同的服务器端程序建立不同的客户端程序。
浏览器/服务器端模式(B/S模式):对于不同的服务器端程序使用统一的“客户端”(即浏览器)即可。

网络编程简介:C/S模式应用程序
在网络编程中,C/S模式应用程序的开发,需要同时开发客户端应用程序和服务器端应用程序。
客户端应用程序开发步骤:
客户端建立与服务器端的连接(通过IP地址和端口确定服务器端程序)。
客户端封装请求数据,发送给服务器端;客户端获得服务器端响应数据,解析并处理数据。
客户端关闭网络连接。
在网络编程中,C/S模式应用程序的开发,需要同时开发客户端应用程序和服务器端应用程序。
服务器端应用程序开发步骤:
服务器端鉴定特定端口。
服务器端接收客户端连接。
服务器端接收客户端请求数据,解析并处理请求数据;服务器端封装响应数据,发送给客户端端。
服务器端关闭网络连接。

网络编程简介:B/S模式应用程序
B/S模式应用程序的开发,由于客户端统一使用浏览器访问,只需要开发服务器端应用程序即可。
由于客户端使用浏览器访问,服务器端应用程序本质上属于Web应用程序;浏览器和服务器通信协议采用HTTP协议。
Web应用程序的开发过程在后续课程中详细介绍,在此不再赘述。

URL及应用
使用Socket进行网络编程,从网络传输层角度进行分析,适用于绝大多数网络连接方式;但是需要开发人员熟练掌握网络传输、网络协议等基础知识,开发难度较大。
在Java语言中,提供了一组URL处理类,封装了Socket编程技术的实现细节,用来方便开发人员进行网络连接、网络数据传输等常用的网络任务。
直接使用URL类,可以方便地处理各种常见协议的网络连接。
使用URL类进行网络连接,相当于直接进行远程输入/输出流操作,只需开发人员熟练掌握常用IO操作即可,大大降低开发难度。

URL类:统一资源定位符,指向互联网“资源”的指针。
常用构造方法:
URL(String url);  // 通过给定字符串建立URL对象
常用方法:
InputStream  openStream(); // 打开当前URL连接的输入流
URLConnection  openConnection();  // 建立URL网络连接

URLConnection类:应用程序和 URL 之间的通信链接,用于读取和写入此 URL 引用的资源。
对象建立方法:
通过URL对象的openConnection()方法创建
使用构造方法:URLConnection( URL  url);
常用方法:
获得响应消息头类方法:getContentType()、getContentLength()、getContentEncoding()、……
获得响应消息主体:getContent()
获得当前连接输入/输出流对象:getInputStream()、getOutputStream()

HttpURLConnection类:特定支持HTTP协议的URLConnection。
对象建立方法:
通过URL对象的openConnection()方法创建,强制转换为目标对象
使用构造方法:HttpURLConnection( URL  url);
常用方法:
从URLConnection类继承的方法
针对HTTP请求响应消息的特定方法:getRequestMethod()、setRequestMethod()、getResponseCode()、getResponseMessage()、……

下载服务器端文件,基本思路:
创建URL对象:URL url = new URL( 文件地址 );
获取服务器端输入流:InputStream is = url.openStream();
文件读写:从输入流中读取字节写入到输出流(文件)中。

获取服务器HTTP响应消息(消息头和消息主体)。
访问网址:http://software.hebtu.edu.cn/
获取该网页的服务器字符编码、文档类型、服务器响应状态码、网页主体等。

客户端和服务器端建立连接后,连接两端将会建立一个虚拟“线缆”,在网络编程中称之为Socket(套接字);其后在网络两端传输数据都是通过Socket进行的。
Socket借助IP地址和端口号,对应某一台主机中的某一个应用程序。
Socket的主要作用是维护网络连接、在网络双方传输数据。

Socket类:客户端套接字类。实现客户端向服务器发送数据、接收服务器数据等功能;实现服务器端向客户端发送数据、接收客户端数据等功能。
构造方法:
Socket(InetAddress  address, int  port);
Socket(String  host,  int  port);  
常用方法:
getInputStream(); // 获得网络输入流
getOutputStream(); // 获得网络输出流
close(); // 关闭Socket连接

客户端与服务器端通信时,借助网络输入/输出流进行传输;但是对于客户端和服务器而言,输入流或输出流是相对的。

客户端Socket应用程序所做的工作主要有:
与服务器端建立连接(通过IP和端口号确定主机上的程序)。
Socket  client  =  new Socket(“localhost”,  80);
向服务器端发送数据,接收服务器端数据。
向服务器端发送数据:os  =  client.getOutputStream();
接收服务器端数据:is  =  client.getInputStream();
关闭Socket连接。
client.close();

ServerSocket类:服务器端套接字类。监听服务器指定端口,接收客户端连接请求。
构造方法:
ServerSocket(int  port);
常用方法:
accept(); // 用于产生“阻塞”,直到接收一个连接,返回客 户端Socket对象
close(); // 关闭服务器端Socket监听

服务器端所做的主要工作有:
监听特定端口。
ServerSocket  server  =  new  ServerSocket(8888);
接收客户端连接。
Socket  client  =  server.accept();
接收客户端请求,向客户端发送响应。
接收客户端请求数据:is  =  client.getInputStream();
向客户端响应数据:os  =  client.getOutputStream();
关闭连接。
关闭客户端:client.close();
关闭服务器端:server.close();

单Socket客户端和单服务器端一次通讯
SocketServer建立后,通过accept来等待client连接
Client连接Server端
Server端建立inputstream和outputstream
Client端建立inputstream和outputstream
双方一次通讯
各自关闭自己的inputstream和outputstream

单服务器端接收多次通讯
SocketServer建立后,通过accept来等待client连接
Client连接Server端
Server端建立inputstream和outputstream
Client端建立inputstream和outputstream
双方一次通讯
Client关闭
Server端等待下次连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值