黑马程序员——网络编程

  ------- 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);	
	}
}








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章