黑马程序员(八)网络编程
来源:互联网 发布:淘宝免单网 编辑:程序博客网 时间:2024/06/08 01:21
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
网络编程
网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,则需要一直启动。
例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。在一些程序中,程序既有客户端功能也有服务器端功能,最常见的软件就是BT、emule 这类软件了。
网络编程:就是用语言(java)实现多台计算机的通信
三大要素:
A:IP地址。
网络中每一台计算机的唯一标识。
B:端口
用于标识进程的逻辑地址
C:协议
定义通信规则
举例:
我要和小明说话。
A:找到小明
B:小明用耳朵接收。
C:我说家乡话,你觉得他能听懂吗。
IP地址:
计算机的唯一标识。
给出一个十进制的数值:
192.168.3.100
而它在网络中实际上是如下表示的:
11000000 10101000 00000011 01100100
为什么我们不是采用下面这种方式配置ip的呢?
如果采用二进制,不方便记忆。
所以,为了方便记忆,把这种表示形式做了改进:"点分十进制"
IP地址的分类:
A类 1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
IP地址的组成:
IP地址 = 网络号码+主机地址
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
256*256*256 --- 16777216
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
256*256 --- 65536
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
256
查看本机IP:ipconfig // ipconfig /all 获取全部的电脑信息
查看网络是否有问题 ping+IP地址
ping 127.0.0.1(本机回环地址)
端口:
逻辑端口 我们指的就是逻辑端口
A:每个网络程序都会至少有一个逻辑端口
B:用于标识进程的逻辑地址,不同进程的标识不一样
C:有效端口:0~65535,其中0~1024系统使用或保留端口。
通过360可以查看端口号
网络通信协议:
在计算机网络中,连接和通信的规则被称为网路通信协议,网络通信协议有很多种,目前应用最广泛的是TCP和UDP两种
TCP和UDP的联系和用途
一.区别
二者都是有用的和常用的,如果纯粹从概念上区分二者就比较费解了,我们直接从功能上进行区分,简单明了:
这两种传输协议也就是合于适配不同的业务和不同的硬件终端。
在使用中,类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,他们不需要准确存储对准确性无要求但要求速度快。
类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度。
对系统资源的要求:CP较多,UDP少。
程序结构:UDP程序结构较简单,TCP复杂。
流模式与数据报模式:TCP保证数据正确性,UDP可能丢包; TCP保证数据顺序,UDP不保证
二.用途
TCP是面向连接的,有比较高的可靠性,一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等,而 UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003以前是只使用UDP协议的,其服务器 使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在一般的显IP的QQ版本中显示好友的IP地址信息中端口 常为4000或其后续端口的原因了),即QQ程序既接受服务又提供服务,在以后的QQ版本中也支持使用TCP协议了。
Udp是一种面向无连接的通信协议,该协议使得数据传输的速度得到大幅度的提高。视频聊天语音聊天基本都是用UPD协议。
定义的规则
TCP
建立连接通道
数据无限制
面向连接(三次握手)
可靠
速度慢
TCP客户端:
1 建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)
2 如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象
3关闭资源
TCP服务端:
1 创建服务端socket服务,并监听一个端口。
2 服务端为了给客户端提供服务,获取客户端的内容,可以通过accept方法获取连接过来的客户端对象。
3 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。
4 如果通讯结束,关闭资源。注意:要先关客户端,再关服务端。
代码:
UDP
把数据打包
数据有限制
面向无连接
不可靠
速度快
udp的发送端:
1建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。
2明确要发送的具体数据。
3将数据封装成了数据包。
4用socket服务的send方法将数据包发送出去。
5关闭资源。
udp的接收端:
1创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。
2定义数据包,用于存储接收到数据。
3通过socket服务的接收方法将收到的数据存储到数据包中。
4通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。
关闭资源。
代码
我的总结:对于UDP和TCP,既可以定义输出流也可以创建输入流,具体情况根据需要构建;比如:我们需要客户端给服务器端发送数据,服务器端再给客户端反馈数据;那么就要在客户端和服务器端分别多加一个输入流和输出流!否则,发不出去,收不到!
InetAddress与Socket
InetAddress:构造方法私有,不能直接创建对象。
InetAddressgetByName(String host):在给定主机名的情况下确定主机的ip地址
InetAddress getLocalHost():返回本地主机。
InetAddress[] getAllByName(String host)
ip.getHostName()
Socket
Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO传输。
- 黑马程序员(八)网络编程
- 黑马程序员八、网络编程
- 黑马程序员_java自学学习笔记(八)----网络编程
- 黑马程序员 java基础<八>--网络编程(2)
- 黑马程序员——八、java基础之网络编程(11)
- 黑马程序员——自学总结(八)Java网络编程
- 黑马程序员---网络编程(socket编程)
- 【黑马程序员】网络编程
- 黑马程序员 网络编程
- 黑马程序员:网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 黑马程序员:网络编程
- 黑马程序员--网络编程
- 黑马程序员--网络编程
- 黑马程序员-网络编程
- 黑马程序员-------网络编程
- 黑马程序员-网络编程
- 在继承中关于super的详解
- (一)四轴——PPM信号与接收
- ACM练习—6174问题
- 动态规划 求两个没交集的区间的和的最大值的范围的左边界
- 《Java程序设计》第二次作业:MySQL数据库及Java操作MySQL数据库
- 黑马程序员(八)网络编程
- 欢迎使用CSDN-markdown编辑器
- ACM练习—谁获得了最高奖学金
- MFC对话框风格和工程字符集的关系
- 循环链表&线性表(5.15)
- C语言学习第三天—控制流
- 网页中调起本地程序系列——简介篇
- android中Activity切换动画学习心得
- 论战Yann LeCun:谁能解释极限学习机(ELM)牛X在哪里?