预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

http://www.mobiletrain.org/ 网络编程之TCP协议的网络编程 JAVA语言涵盖的领域非常的广,他也可以完成网络通讯, 也就是说我们以前写程序玩的是单机板,我们把文件从一台机器上的C盘复制到D盘, 我们现在想做什么动作了呢? 能不能从我的机器上发送一个信息到张三的机器上,然后张三再给我回馈一条信息, 实现两个机器之间利用JAVA语言来进行数据的通讯, 数据通讯的原理就是数据的传输,那么这里边和我们本机哪不一样呢,唯一的不同 它涉及到了网络,不在是单机板的。 既然要学习网络,我们要思考一个问题,网络通讯的要素和模型, 首先我要和张三通讯,我是不是要先找到张三那台机器, 那么找他的时候,他这边是不是有一个标识, 这个标识就是IP地址,根据IP找到他后, 接下来通讯的方式是什么呢? 我可以和你用飞秋通讯,也可以用QQ通讯, 那么我想和你用飞秋通讯,那么你的机器上是不是也得装一个飞秋呀, 然后我发送的数据,就发到你的飞秋上来了, 也就是数据发送到对方指定的应用程序上。 由于IP地址不够用,电信厂商们通过子网掩码的获分公网的IP地址。 4段的IP地址不够用,就出现了IPV6,就是6段, 这就是IPV4与IPV6的区别 道理很简单,我用飞秋发送的数据如果发送到你的QQ上,QQ程序是解析不了的。 所以为了标识这些应用程序,给这些网络应用程序都用数字进行标识。 为了方便称呼这个标识,这个标识就叫做端口号,这个端口叫逻辑端口。 那么有一部分人会把那个端口理解成网络的那个接口,那个叫物理端口。 而我们说的这个是逻辑端口,就是一个数字。0-65535之间 那接下来就要定义通讯规则,咱俩要交流的话,得先规定一下,用什么样的语言交流, 这个规则称为协议。一般来说咱俩要按照同一个规则来交流。 国际组织定义了通用协议TCP/IP协议。 不管你是哪国机器,机器上装这个协议就行了。 为了安全起见,很多组织和单位用特定的协议,外界就没有办法连接进去了。 黑客就没有办法攻击了。 网络传输的基本三要素:IP,端口,协议 来看一下使用TCP协议的网络编程 TCP:建立连接,形成传输数据的通道。 在连接中进行大数据量传输 北京千锋互联科技有限公司版权所有 http://www.mobiletrain.org/ 通过三次握手完成连接,是可靠协议 必须建立连接,效率会稍低。 先确定对方在,用三次握手来完成的 先发一次,问对方在吗? 对方收到,就回来一次,在 我收到了,然后再告诉对方, 我收到了 TCP就相当于打电话, 拔号,在向对方发连接请求,要握手 对方把电话拿起,通话。 基于TCP的SOCKET编程: 特点:面向连接的 分为客户端和服务端 分别对应了两个对象,一个是Socket, 一个是ServerSocket 客户端和服务端分别对应两个端点,建立 两个端点的连接后,通过socket中的IO流进行 数据的传输。传输完,关闭socket。 那么客户端与服务器端是两个独立的应用程序。 需求: 建立一个文本转换服务器。 客户端给服务器端发送文本,服务器端会将文本转成大写的再返回给客户端。 而且客户端可以不断的发送文本,服务器端可以不断的转换,直到客户端输入over时,转 换结束。 分析: 客户端: 1.发现操作的数据是来自于设备,于是就想可以用IO流的技术来传送数据 2.数据源:来自于键盘输入 3.目的地:网络上的输出流里 发现操作的是文本,所以用字符流 步骤: 1.创建一个客户的Socket对象,根据服务器端指定的IP地址和端口号 2.获取键盘的录入,通过输入流 3.把数据发送到网络上的输出流去 4.接收服务器端的响应,读取服务器端输出流里的内容 5.关闭流,关闭socket对象 北京千锋互联科技有限公司版权所有 http://www.mobiletrain.org/ 服务器端: 步骤: *1.创建服务器端的serversocket对象 *2.通过accept方法来监听客户端的请求 *3.获得一个网络上的输入流来读取客户端发到网络上输出流里的数据 *4.把数据转成大写并发送到客户端的输入流里去 *5.释放资源 代码实现: 客户端代码: publicclassClient{ publicstaticvoidmain(String[]args)throwsUnknownHostException, IOException{ //1.创建一个客户的Socket对象,根据服务器端指定的IP地址和端口号 Sockets=newSocket("localhost",8888); //2.获取键盘的录入 InputStreamis=System.in; //即然录入的是字符,我们可以把字节流封装成字符流,