计算机网络之网络编程

本文介绍了计算机网络的TCP和UDP两种协议的基本概念,包括无连接、可靠传输等特性。接着详细讲解了Java中UDP和TCP的网络编程,涉及DatagramSocket、Socket、ServerSocket等类的使用,并给出了UDP回显服务器和客户端以及TCP回显服务器和客户端的实现代码。文章最后讨论了多线程、线程池和IO多路复用在解决并发问题上的应用。
摘要由CSDN通过智能技术生成

网络编程原理

在这里我们来介绍两种客户端服务器,一种是TCP/IP,另一种是UDP

UDP:无连接 不可靠传输 面向数据报 全双工

TCP:有连接 可靠传输 面向字符流 全双工

首先我们来介绍什么是有无连接.

像我们常用的QQ和微信,这就是典型的无连接,不管对方是否在线,发送消息就行.

像微信电话或者QQ电话,打给对方,你要等对方接通了之后,才能发送消息.这样的是有连接.

那么什么又是可靠传输和不可靠传输呢?

不能保证传输的数据100%到达.

可靠传输:发送方知道自己的消息是否发送出去了还是丢了.就像ICMP协议中的Ping命令(测试网络互通性),网络不同就丢包,互通的话目的地就回包.

不可靠传输:发送方不知道自己的消息是否发送出去了还是丢了.

面向数据报:就是数据在传输的过程中,是以数据报为基本单位传输.面向字符流:像文件操作一样,

"流式".

全双工:信道能同时进行发送和接收.

介绍完理论知识之后,让我们进入代码环节.

网络编程之UDP

在实现基于UDP客户端服务器之前,首先介绍一下在代码中需要用到的类和方法.

DatagramSocket

创建DatagramSocket这个对象就是创建了一个socket对象.

文件对应的硬件设备是硬盘,而socket文件对应的硬件设备是网卡.既然都是文件,那么它们都是文件描述符表上的一项.

我们程序猿就是基于网卡进行编辑的.

DatagramSocket() 和 DatagramSocket(int port)

DatagramSocket():无参构造方法,没指定哪个端口,系统会自动分配一个端口.

DatagramSocket(int port):有参构造方法,指定了端口.

receive(DatagramPacket p)和send(DatagramPacket p)

顾名思义,一个方法是接收一个方法是发送,但是里面的参数需要注意一下,"输出型参数"在参数中进行内容填充.

close()

既然是文件,那么就要释放资源,不然文件描述符表有可能被占满.

DatagramPacket

DatagramSocket这个对象是描述网卡的,而DatagramPacket这个对象是描述数据的.

DatagramPacket(byte[]buf, int length) : buf 为字节数组,length为数组的长度.

DatagramPacket(byte[] buf, int offset, int length,SocketAddress address) 第二个参数:从零开始到指定长度(length) address : 代表IP地址和端口号.

UDP版本的回显服务器

什么又是回显服务器?正常来说客户端和服务器是这样通信的,放松请求 -> 根据请求计算响应 -> 返回响应 而回显服务器省略了根据请求计算响应,直接将接收到的请求返回成响应.

所以回显服务器又被称为最简单的服务器.

服务器要指明端口号是多少,客户端不用指明,为啥客户端不用指明?

我们程序员是对客户端进行编写,知道哪个端口是空闲的.而客户端就不知道了,毕竟是用户的电脑.

根据上述的receive()方法的讲解,方法中的参数类型是DatagramPacket 所以我们要创建一个空的DatagramPacket实例,给它初始化,然后交给receive()方法将接受到的请求写入到字节数组中.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值