(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)
1.1 编程模型
服务器:
(1)创建ServerSocket类型的对象,并提供端口号;
(2)等待客户端的连接请求,调用accept()方法;
(3)使用输入输出流进行通信;
(4)关闭Socket并释放有关的资源;
客户端:
(1)创建Socket类型的对象,并提供服务器的IP地址和端口号;
(2)使用输入输出流进行通信;
(3)关闭Socket并释放有关的资源;
1.2 相关类和方法的解析
(1)ServerSocket类
java.net.ServerSocket类主要用于描述服务器的套接字(大插排)。
ServerSocket(int port) - 根据参数指定的端口号来构造对象。
Socket accept() - 侦听并接受到此套接字的连接请求。
void close() - 关闭套接字。
(2)Socket类
java.net.Socket类用于描述客户端的套接字,该套接字是两台机器间通信的端点。
Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。
InputStream getInputStream() - 用于获取当前Socket的输入流。
OutputStream getOutputStream() - 用于获取当前Socket的输出流。
void close()
练习:
编写TestServerString类,使用BufferedReader类读取字符串内容并打印出来;
编写TestClientString类,使用PrintStream类发送字符串"hello"给服务器;
要求实现服务器接受到客户端的消息后,向客户端回发消息"I receive!";
要求实现客户端发送给服务器的数据内容由用户从键盘输入;
要求实现客户端和服务器可以不断地进行通信,直到客户端发送"bye"后通信结束;
要求服务器可以不断地响应客户端的连接请求,采用多线程技术实现;
扩展作业:
要求实现每当服务器接受到客户端发来的消息后,就将该消息发送给当前在线所有客户端
要求采用多线程分别处理消息的发送和接收;
要求实现聊天记录的生成;
要求实现文件的传输;
要求实现单聊和群聊的功能选择;
2.tcp协议和udp协议的比较(笔试题)
2.1 tcp协议
tcp协议 - 传输控制协议,是一种面向连接的协议,类似于打电话。
- 建立连接 => 进行通信 => 断开连接
- 在通信的整个过程中全程保持连接
- 保证了数据传递的可靠性和有序性
- 是一种全双工的字节流通信方式
- 服务器压力比较大,资源消耗比较多,并且发送数据的效率相对比较低
2.2 udp协议
udp协议 - 用户数据报协议,是一种非面向连接的协议,类似于写信。
- 在通信的整个过程中不保持连接
- 不保证数据传递的可靠性和有序性
- 是一种全双工的数据报通信方式
- 服务器压力比较小,资源消耗比较少,并且发送数据的效率相对比较高
3.基于udp协议的编程模型(重点)
3.1 编程模型
主机A(接收方):
(1)创建DatagramSocket类型的对象,并提供端口号;
(2)创建DatagramPacket类型的对象,用于接收发来的数据;
(3)从Socket中接收数据,调用receive()方法;
(4)关闭Socket并释放有关的资源;
主机B(发送方)
(1)创建DatagramSocket类型的对象;
(2)创建DatagramPacket类型的对象,并提供接收方的IP地址和端口号;
(3)通过Socket发送数据,调用send()方法;
(4)关闭Socket并释放有关的资源;
3.2 相关类和方法的解析
(1)DatagramSocket类
java.net.DatagramSocket类用于描述发送或接受数据报的套接字(邮局点);
DatagramSocket() - 无参的方式构造对象。
DatagramSocket(int port) - 根据参数指定的端口号来构造对象。
void receive(DatagramPacket p) - 用于接收数据并存放到参数指定的变量中。
void send(DatagramPacket p) - 用于将参数指定的数据发送出去。
void close()
(2)DatagramPacket类
java.net.DatagramPacket类用于描述数据报信息(信件);
DatagramPacket(byte[] buf, int length) - 用于接收数据包并记录到参数变量中;
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
- 用于将参数指定的数据发送到参数指定的位置
InetAddress getAddress() - 用于获取发送方或接收方的通信地址信息。
int getPort() - 用于获取发送方或接收方的端口信息。
int getLength() - 用于获取发送或接收数据的长度。
(3)InetAddress类
java.net.InetAddress类用于描述互联网协议地址。
static InetAddress getLocalHost() - 用于获取本地主机的通信地址信息。
static InetAddress getByName(String host) - 根据参数指定的主机名来获取通信地址。
String getHostName() - 用于获取通信地址中的主机名信息。
String getHostAddress() - 用于获取通信地址中的IP地址信息。
(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制的更多相关文章
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- python语法基础-网络编程-TCP协议和UDP协议
############### 网络编程 ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...
- 网络编程杂谈之TCP协议
TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立"主机到主机"的通信,所以在我们日常进行网络编程时只要确定主机和端口,就能实 ...
- Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)
网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...
- Android网络编程系列 一 TCP/IP协议族之传输层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...
- TCP/IP协议:OSI七层模型、TCP/IP四层模型的对比
1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...
- OSI七层协议模型、TCP/IP四层模型学习笔记
1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...
随机推荐
- highcharts绘制股票k线
借助highcharts绘制股票k线: 后台通过websocket没个一定时间下发最新数据,然后重新绘制k线; 开发文档: https://api.highcharts.com/highcharts/ ...
- Jsp&Servlet入门级项目全程实录第5讲
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.修改功能实现 dao public int gradeAdd(Connection con,Grade grade ...
- 面向连接的传输TCP(一)
这篇博客主要是对计算机网络自顶向上做的阅读笔记,深入地了解TCP 一.TCP连接 1.特点: a.TCP是面向连接的,因为一个进程在向另一个进程进行数据传输之前必须先要握手,即要互相发送报文,以确认信 ...
- Linux CPU使用率的计算
CPU 使用率衡量的是程序运行占用的CPU 百分比.Linux 的CPU 使用率信息可以通过/proc/stat 文件计算得到. proc 文件系统 /proc 文件系统是一个伪 ...
- UNIX 高手的另外 10 个习惯
让我们面对现实吧:坏习惯很难改变.但是您已经熟悉的习惯可能更难克服.有时,重新审视某些事情可能让您遇到“啊哈,我没想到它能做到这一点!”的时刻.在 Michael Stutz 的优秀文章“UNIX 高 ...
- JVM之---垃圾回收
JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存. 1.收集器 通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集 ...
- ASP.NET Core 2 学习笔记(十)视图
ASP.NET Core MVC中的Views是负责网页显示,将数据一并渲染至UI包含HTML.CSS等.并能痛过Razor语法在*.cshtml中写渲染画面的程序逻辑.本篇将介绍ASP.NET Co ...
- CCScrollView的滑动体验
最近在研究cocos2dx,由于项目中要用到内容滚动效果(内容超出容器,可以通过滑动屏幕滚动来查看),所以就毫不犹豫的选择了CCScrollView组件. 使用中发现CCScrollView的体验 ...
- HTML5 FormData实现文件上传实例
表单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自从有了HTML5的FormData后,老板再也不用担心我的上传了. For ...
- requireJS中如何用r.js对js进行合并和压缩css文件
我运行的环境是windows+node.js,首先是用npm安装requirejs(全局安装,即使用 'npm install requirejs -g',这样方便在各个目录调用),接着就是下载r.j ...