(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先有模型,后有协议,先有标准,后进行 ...
随机推荐
- hadoop2.x学习笔记(一):YARN
一.YARN产生的背景 MapReduce1.x存在的问题:单点故障&节点压力大不易扩展. 资源利用率&成本 催生了YARN的诞生 不同计算框架可以共享同一个HDFS集群上的数据,享 ...
- Linux下的MongoDB安装&启动&关闭
一.下载安装包 下载地址 二.解压安装包 $ tar -zxvf mongodb-linux-x86_64-3.0.6.tgz 三.复制到指定的目录下 $ mv mongodb-linux-x86_6 ...
- 三种数据库访问——原生JDBC
原生的JDBC编程主要分一下几个步骤: (原生的JDBC编程指,仅应用java.sql包下的接口和数据库驱动类编程,而不借助任何框架) 1. 加载JDBC驱动程序: 2. 负责管理JDBC驱动程序的类 ...
- Linq to xml 操作带命名空间的xml
昨天需要操作用代码操作csproj文件,实现不同vs版本的切换. 在用XElement读取了csproj文件以后怎么也获取不到想要的对象. 反反复复试验了好多次都不得要领:先看下csproj文件的内容 ...
- datatable 转excel
public static void ExportToExcel(System.Data.DataTable dt) { if (dt == null) return; Microsoft.Offic ...
- Ajax 学习(一)
此篇为学习笔记 概述 Ajax(Asynchronous Javascrpt And Xml)是一种运用于浏览器的技术,它可以在浏览器与服务器之间使用异步通信机制进行数据通信,从而允许浏览器向服务器获 ...
- [javaSE] 数组(查找-二分查找)
前提数组必须是有序的 定义最小,最大,中间的角标索引 int min,max,mid; min=0; max=arr.length-1; mid=(min+max)/2; 上面的索引需要变化,使用循环 ...
- 【原】Shiro框架基础搭建[2]
简介: 关于搭建一个最基础的shiro网上的例子有很多,这里是记录一下自己尝试去看官方文档所搭建的一个小demo,项目采用的是原始的java静态工程,导入相关jar包后就能运行. 首先进入官网http ...
- 简单的PHP的任务队列
文章太长,不作过多介绍,反正,文章的头部就说明了大概的意思...原文如下:写了一个简单的队列任务处理.多进程任务,异步任务可能会用到这个(主要是命令行应用)比如,任务的某个一个环节速度十分不稳定,可能 ...
- 【Android】Retrofit网络请求Service,@Path、@Query、@QueryMap...
对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了. 下面分为GET.POST.DELETE还有PUT的请求,说明@Path.@Query.@QueryMap.@Bo ...