JAVA学习十一:网络编程

本文详细介绍了UDP(用户数据报协议)和TCP(传输控制协议)的区别和应用场景。UDP是一种无连接、不可靠的协议,适合于视频会议、QQ聊天等实时性要求高的场景,而TCP是一种面向连接、可靠的协议,适用于需要稳定数据传输的场合。在TCP网络编程中,涉及ServerSocket和Socket类的使用,包括三次握手和四次挥手的过程。通过示例代码展示了服务器端和客户端如何进行通信。
摘要由CSDN通过智能技术生成

UDP协议
用户数据报协议:UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方服务器是否启动。直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用中,例如视频会议、QQ聊天等。

网络编程程序的分类
1.B/S程序: 浏览器与服务器程序
2.C/S程序: 客户端与服务器程序

TCP协议-OSI网络模型
指的是从一台计算机的软件中,将数据发送到另一台计算机的软件中的过程。
七层网络模型:应用层/表现层/会话层/传输层/网络层/数据链路层/物理层

三次握手和四次挥手熟悉
tcp协议客户端与服务器连接时,存在三次握手操作,确保消息能准确无误的发送。断开连接时,存在四次挥手操作。

TCP协议的C/S程序
需要使用到两个类,来编写TCP协议的cs程序 。
1.ServerSocket
2.Socket搭建客户端
两方使用socket(套接字,通信端点)进行交流。

ServerSocket(服务器)
用于创建服务器,创建完毕后,会绑定一个端口号
然后此服务器可以等待客户端连接
每连接一个客户端。服务器就会得到一个新的Socket对象,用于跟客户端通信。

常用构造方法:

ServerSocket(int port);****

创建一个基于TCP/IP协议的服务器,并绑定指定端口号。
注意:参数port的范围是:0-65535(建议1025-65535)。

常用方法:

Socket accept();****

等待客户端连接,
此方法会导致线程的阻塞!
直到一个新的客户端连接成功,return Socket对象后,线程再继续执行。

void close();

释放占用的端口号,关闭服务器。

Socket(套接字)
是两台计算机之间通信的端点,是网络驱动提供给应用程序编程的一种接口,一套标准,一种机制。

构造方法

Socket(Stirng ip,int port) ****

创建一个套接字,并连接指定ip和端口号的服务器。
参数1. 服务器的ip地址
参数2. 服务器软件的端口号

常用方法

-OutputStream getOutputStream();

返回的是,指向通信的另一端点的输出流

-InputStream getInputStream();

返回的是,指向通信的另一端点的输入流

-void close();

关闭套接字

注意:在网络编程中,获取输入输出流的操作,对于客户端和服务器来说是相对的。
客户端的输入流,输入的是服务器的输出流 输出的内容。
客户端的输出流,输出到了服务器的输入流中。
所以在使用时,需要注意一下规则:
客户端与服务器获取流的顺序必须相反
例如:客户端先得到了输入流,服务器必须先获取输出流。

代码案例:

//服务器代码
public static void main(String[] args) throws IOException{
//搭建服务器
ServerSocket server = new ServerSocket(55565);
System.out.println(“服务器启动完毕”);
//等待客户端的连接
Socket socket = server.accept();
System.out.println(“一个客户端连接了”);

//建立输出流
OutputStream os = socket.getOutputStream();
//将输出流转换为打印流
PrintStream ps = new PrintStream(os);
ps.println(“欢迎你连接服务器”);

InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String text = br.readLine();
System.out.println(“服务器收到客户端的回复”+text);

System.out.prrintln(“服务器程序执行结束”);
}
//客户端代码
public static void main(String[] args) throws IOException{
//连接服务器
Socket socket = new Socket(“localhost”,55565);
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String text = br.readLine();
System.out.println(“客户端接到消息”+text);
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.print(“服务器你好”);
//多线程服务器
//使用while循环连接多台客户端
while(true){
Socket socket = server.accept();
//当接收客户端连接时花费了10分钟。那么线程就会阻塞10分钟。
//此时可以单独开条线程,每连接一台客户端就开一条单独的线程。
new Thread(){
try{
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
}catch(IOException e){
e.printStackTrace();
}
}.start();
System.out.println(“一个客户端连接了”);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值