Java_网络编程

网络编程

网络编程简介

将地理位置不同,具有独立功能的多台计算机连接在一起就形成了网络,从而这多台计算机具有了通信功能,所以为网络创造了一系列的通信协议。在整个通信过程中往往会分为两种端口:服务端和客户端,所以围绕着服务端和客户端的程序开发就有了两种模式
**C/S(Client/Server)😗*要开发两套程序(服务端和客户端),这种模式在进行维护的时候需要维护两套程序,而且客户端的程序更新也必须及时,此类程序安全性高;
**B/S(Browser/Server)😗*只需针对服务器开发一套程序,客户端使用浏览器进行访问。这种程序在日后进行程序维护的时候只需要维护服务端就可以,客户端不需要做任何修改。此类程序使用公共端口,包括公共协议,所以安全性很差。
下面总结的是C/S结构的程序两种实现:TCP模型和UDP模型。

Echo程序模型

Echo的程序模型的基本思想在于,客户端通过键盘输入一个信息,把此信息发送给服务器端后,服务器端会将此信息反馈给客户端进行显示,本操作只要通过java.net包的两个类实现:

  • ServerSocket类:封装TCP协议类,工作在服务器端。
  • Socket类 :封装TCP协议的操作类,每一个Socket对象都表示一个客户端。

ServerSocket类常见方法:

方法类型描述
public ServerSocket(int port) throws IOException构造开辟一个指定的端口监听,一般使用5000以上
public Server accept() throws IOException普通服务器端接收客户端请求,通过Socket返回
public void close() throws IOException普通关闭服务器

Socket类常见方法:

方法类型描述
public Socket(String host ,int port) throws UnknownHostExcetion,IOException构造指定要连接的主机(IP地址)和端口
public OutputStream getOutputStrea() throws IOException普通取得指定客户端的输出对象,使用的时候肯定使用PrintStream装饰操作
public InputStream getInputStream() throws IOException普通从指定的客户端读取数据,使用Scanner操作

Echo通信模型的实现需要通过ServerSocket类在服务器端定义数据监听端口,在没有客户端连接时将一直处于等待连接状态。每一个客户端连接到服务器端后都通过Socket实例描述,通过Socket可以获取客户端输入流与输出流实例,这样就可以利用I/O实现通信。

BIO处理模型

基于单线程(主线程)的处理机制实现的网络通信,这样就会造成一个问题,在同一段时间只允许有一个客户端连接到服务器端进行通信处理,而且当次客户端退出后服务器端也将随之关闭。所以为了提升服务器端的处理性能 ,则可以利用多线程来处理多个客户端的通信需求。
将每一个客户端的Socket实例封装在一个线程中,这样一个服务器端就可以同时处理多个客户端请求。
但是虽然使用多线程修改了服务器端处理模式,但是在程序开发中并没有对服务器端可以用的线程数量进行限制,这也就意味着如果并发客户端访问量增加,则服务器端将会出现严重的性能问题。所以在JDK1.4以前就必须对线程数量进行有效控制,需要追加客户端连接等待机制才可以正常使用,这样的开发操作就是BIO模式(Blocking IO,阻塞IO)模式。

UDP程序

TCP的所有操作都必须建立可靠的连接才能通信,但这种做法肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了UDP传输协议(不可靠连接),即利用数据报的形式进行数据发送,由于没有建立可靠连接,此时接收端可能处于关闭状态,所以利用UDP发送的数据,客户端不一定接收到。

方法类型描述
public DatagramPacket(byte[] buf,int length)构造实例化DatagramPacket对象时指定接收数据长度
public DatagramPacket(byte[] buf,int length)构造实例化DatagramPacket对象时指定发送的数据、数据的长度、目标地址及端口
public byte[] getData()普通返回接收的数据
public int getLength()普通返回要发送或接收数据的长度
方法类型描述
public DatagramPacket(int port) throws SocketException构造创建DatagramSocket对象,并指定监听的端口
public void send(DatagramPacket P) throws IOException普通发送数据报
public void receive(DatagramPacket P) throws IOException普通接收数据报

在进行UDP客户端编写时需要设置一个客户端的监听端口,接收到的数据信息可以利用DatagramPacket 类对象进行接收,这样在客户端打开的情况下会自动接收到服务器端发送来的信息。

总结

服务器端

  1. 利用ServerSocket开辟一个端口监听
  2. 再利用ServerSocket.accept()方法接收客户端发出的请求,并且返回值是Socket
  3. 然后利用返回的Socket类型实现io流(InputStream getInputStream)
  4. 最后关闭ServerSocket:ServerSocket.close()

客户端

  1. 利用socket指定要连接的主机和端口
  2. 实现io流(OutputStream getOutputStream)
  3. 最后关闭socket连接:socket.close()

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值