黑马程序员——网络编程

来源:互联网 发布:python做app 编辑:程序博客网 时间:2024/06/03 23:41

  ------- android培训、java培训、期待与您交流! ----------

网络通讯最重要因素:1、ip地址(相当于人家快递员给你送快点一样) 2、端口(相当于你告诉人家小区以后,你要告诉人家具体几楼几栋几单元)A类IP段 0.0.0.0 到127.255.255.255 (0段和127段不使用)

B类IP段 128.0.0.0 到191.255.255.255

C类IP段 192.0.0.0 到223.255.255.255

XP默认分配的子网掩码每段只有255或0

A类的默认子网掩码 255.0.0.0 一个子网最多可以容纳1677万多台电脑

B类的默认子网掩码 255.255.0.0 一个子网最多可以容纳6万台电脑

C类的默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑

ip地址对象:ip目前分 ip4 和 ip6。而xp系统好像都是ip4。通用协议,而ip6协议在window7 系统已经加入了。

ip地址对象:InteAddress,ip 没有直接的构造函数,他只有通过他的静态方法返回他的对象。

1、getByName(String):可以是域名,可以是以ip地址形式。

2、getLocalHost():返回本机对象。

3、getAllByName():一台机器对应多个ip地址时,返回 InteAddress数组

4、getHostAddress():返回对象的ip地址形式。


传输协议:分成2种形式:①UDP ②TCP

UDP:面向无连接,不需要建立连接,数据最大为64kb,速度快,不安全。(对讲机使用的就是该原理)

Tcp:面向连接,需要三次握手建立通道,当建立通道以后可以进行大数据传输,速度稍慢,安全。


UDP体验:我是使用过对讲机的,2部对讲机调成同一个频段以后,一方说话,另一方在有效范围内收到数据就会立即播放出来。。2个不在同一个频段上面,2个对讲机依然可以讲话,但是不可以互相接收数据了。  这里的频段可以理解为 端口。

看一下QQ,它使用了多线程技术,监听了不同的端口,而且还是采用的UDP。



TCP由于可以使用传输大数据,所以需要先建立理解。看人家迅雷。就是一个很好的例子!!如果人家迅雷采用UDP的话。你能有这么快的速度吗?

而且通过UDP下载以后,还有可能丢包呢。造成数据丢失呢。。而TCP就不会。




Socket:网络服务的 一种机制。通信2端的 应用程序必须先有Socket才能通信。

现在我来使用UDP将一段信息发送出去。

import java.io.*;import java.net.*;class UDPScoket{public static void main(String[] args) throws IOException{DatagramSocket ds = new DatagramSocket();<span style="white-space:pre"></span>//使用Socket服务BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String message = bufr.readLine();byte[] data = new byte[1024];data = message.getBytes();DatagramPacket dp = new DatagramPacket(data,0,data.length,InetAddress.getByName("192.168.1.255"),55555);<span style="white-space:pre"></span>//定义数据包,并将该数据发送至哪里去ds.send(dp);<span style="white-space:pre"></span>//发送}}


由于发送端是没有设置端口的,所以系统自动分配了一个端口。。192.168.1.255 是广播地址,相当于给 192.168.1.2~192.168.1.254 发送信息,但是必须要有一个程序来接收并处理我发送的这些数据,并且他的端口必须是 55555


制作一个接收端:

import java.net.*;import java.io.*;class UDPPacket {public static void main(String[] args) throws IOException{DatagramSocket ds =new DatagramSocket(55555);//创建Socket服务,监听55555端口byte[] data = new byte[1024];DatagramPacket dp =new DatagramPacket(data,data.length);<span style="white-space:pre"></span>//定义数据包,存储接收的字节数据ds.receive(dp);//阻塞式方法,等到接收数据String ip = dp.getAddress().getHostAddress();//打印发来数据的Ip地址String message = new String(dp.getData(),0,dp.getLength());//取出数据System.out.println(ip + "发来讯息:" + message);}}








0 0