您的位置:首页 > 理论基础 > 计算机网络

黑马程序员————JAVA之网络编程

2015-09-29 21:24 459 查看
-------http://www.itheima.com"target="blank">android培训http://www.itheima.com"target="blank">java培训、期待与您交流!
 
一、概述
1. 网络编程三要素:IP:计算机在互联网上的唯一的地址;端口;协议:
2. IP概念:
所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。
按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。
例如一个采用二进制形式的IP地址是"11000000101010000000000101100100",这么长的地址,人们处理起来也太费劲了。
为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号"."分开不同的字节。于是,上面的IP地址可以表示为“10.0.0.1”。IP地址的这种表示法叫做"点分十进制表示法",这显然比1和0容易记忆得多。
最小IP:00000000.00000000.00000000.00000000	:十进制:0.0.0.0
最大IP:11111111.11111111.11111111.11111111	:十进制:255.255.255.255
3. IP地址的组成
    P地址 = 网络号码+主机地址
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
4. 局域网内的电脑在什么情况下可以互相访问:在同一网段;
怎么来区分同一网段:
"子网掩码":
例如:有如下IP:
1).192.168.1.10
    2).192.168.1.20
3).192.168.2.30
1.子网掩码:为:255.255.255.0(二进制:11111111.11111111.11111111.00000000)
注意:子网掩码中全部表示为1的作为"网络号码")
1和2可以互访;
2.子网掩码:255.255.0.0(二进制:11111111.11111111.00000000.00000000)
1和2和3都可以互访;
特殊地址:
127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1   
DOS命令 ipconfig:查看本机IP地址
xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址
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
5. 端口:
1).物理端口:网卡口;
2).逻辑端口:由操作系统管理的,在一个"物理端口"的情况下,为了能同时运行多个"网络应用程序",这时操作系统提供了"逻辑端口";
A.我们讲的"端口"就是"逻辑端口";
B.逻辑端口的范围:0--65535;
C.一个应用程序可以同时占用多个端口;
D.一个端口,在某一时刻,只能由一个应用程序占用;
    E.0--1024:是由操作系统使用的,我们最好不要用;
6. 协议:
1).TCP,UDP,FTP,HTTP.......
2).UDP协议:
   1.面向无连接:类似于"广播","有线电视"
   2.数据需要打包发送;
   3.数据大小有限制:64K以内;
   4.因为无连接,所以属于不可靠的协议,但速度快;
3).TCP协议:
1.面向连接:类似于"打电话"
2.可以进行大量数据的传输;
3.由于需要连接,建立连接就要双方确认,所有速度慢;
二、通过代码演示讲解部分功能:
 
 1.InetAddress类的部分获取功能:
packagecom.isdf;

importjava.net.InetAddress;
importjava.net.UnknownHostException;

/*
*java.net.InetAddress(类):此类表示互联网协议(IP)地址。
*获取任意主机:getByName(静态方法)
*机名:getHostName
*主机IP地址:getHostAddress
*/

publicclassDemo_获取计算机IP{
publicstaticvoidmain(String[]args){
InetAddressaddress;
try{
address=InetAddress.getByName("WIN-DEFRH7SB8J9");
StringhostName=address.getHostName();
Stringip=address.getHostAddress();
System.out.println("计算机名"+hostName+"IP"+ip);

}catch(UnknownHostExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}

}
2.关于网络发送信息与接收信息的小案例
 
packagecom.idj_TCPz;importjava.io.IOException;importjava.io.OutputStream;importjava.net.Socket;publicclassSend{publicstaticvoidmain(String[]args)throwsIOException{//实例化一个Socket对象Socketsc=newSocket("192.168.30.156",8888);//通过Socket接收一个输出流OutputStreamout=sc.getOutputStream();//发送数据out.write("你好,呵呵".getBytes());//释放资源out.close();sc.close();}}
 
 
packagecom.idj_TCPz;importjava.io.IOException;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassReceve{publicstaticvoidmain(String[]args)throwsIOException{//实例化一个ServerSocketServerSocketsever=newServerSocket(8888);//等待连接System.out.println("等待接收数据");Socketsocket=sever.accept();//获取输入流InputStreamin=socket.getInputStream();//读取信息byte[]byteArray=newbyte[1024];intlen=in.read(byteArray);Strings=newString(byteArray,0,len);System.out.println("接收到信息:"+s);//释放资源in.close();sever.close();socket.close();}}
 
3.UDP协议发送数据:
packagecom.idj_UDP发送数据;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;/**UDP协议发送数据:**1.实例化一个:DatagramSocket对象;*2.准备数据:*		1).目标机器的IP:InetAddress对象;*		2).目标机器的端口号;*		3).信息内容:byte[]数组*3.准备数据包:DatagramPacket对象;需要封装:IP、端口、信息内容;*4.发送数据:DatagramSocket对象的send(DatagramPacketp)方法,*/publicclassSend{publicstaticvoidmain(String[]args)throwsIOException{//实例化一个:DatagramSocket对象;DatagramSocketsocket=newDatagramSocket();//准备数据InetAddressadd=InetAddress.getByName("");intport=255;byte[]byteArray="哈哈,小逗比,在睡觉吗?".getBytes();//准备数据包DatagramPacketpck=newDatagramPacket(byteArray,byteArray.length,add,port);//发送数据socket.send(pck);//释放资源socket.close();System.out.println("信息已发出!");}}
packagecom.idj_UDP发送数据;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;/**UDP的接收端:*1.构造一个DatagramSocket(端口号)*2.准备一个空的byte[]数组,准备接收数据;*3.准备一个空的数据包,DatagramPacket,用来接收数据;*4.等待数据的到来,DatagramPacket的receive(DatagramPacket)*	如果数据到达,那么receive()方法将返回,并将数据封装到数据包对象中;*5.从数据包中读取数据*/publicclassReceive{publicstaticvoidmain(String[]args)throwsIOException{//构造一个DatagramSocket(端口号)DatagramSocketsocket=newDatagramSocket(255);//准备一个空的byte[]数组,准备接收数据;byte[]byteArray=newbyte[1024];//准备一个空的数据包,DatagramPacket,用来接收数据;DatagramPacketpck=newDatagramPacket(byteArray,byteArray.length);//等待数据到达System.out.println("正在等待信息到达。。。");socket.receive(pck);//程序在此会阻塞System.out.println("有信息到达");//获取数据byte[]byteInfo=pck.getData();Stringstr=newString(byteInfo,0,pck.getLength());Stringip=pck.getAddress().getHostAddress();System.out.println("接收到信息:IP:"+ip+"内容"+str);socket.close();}}
 
4.服务器端收发数据案例:
 
packagecom.idj_服务器端收发数据;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;publicclassClient{publicstaticvoidmain(String[]args)throwsIOException{//实例化一个SocketSocketsocket=newSocket("192.168.30.145",9900);//通过Socket获取一个输出流OutputStreamout=socket.getOutputStream();//发送数据out.write("呵呵,来喽!加油!".getBytes());//等待反馈--获取一个输入流InputStreamin=socket.getInputStream();//接收数据byte[]byteArray=newbyte[1024];intlen=in.read(byteArray);Stringstr=newString(byteArray,0,len);System.out.println("发送端接收到反馈:"+str);//释放资源in.close();out.close();socket.close();System.out.println("客户端结束!");}}
 
<preclass="java"name="code">packagecom.idj_服务器端收发数据;importjava.io.IOException;importjava.io.InputStream;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{puba240licstaticvoidmain(String[]args)throwsIOException{//实例化一个ServerSocketServerSocketsever=newServerSocket(9900);//等待连接Socketsocket=sever.accept();//获取输入流InputStreamin=socket.getInputStream();//定义一个字节数组byte[]byteArray=newbyte[1024];intlen=in.read(byteArray);}}
packagecom.idj_UDP发送数据;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;/**UDP的接收端:*1.构造一个DatagramSocket(端口号)*2.准备一个空的byte[]数组,准备接收数据;*3.准备一个空的数据包,DatagramPacket,用来接收数据;*4.等待数据的到来,DatagramPacket的receive(DatagramPacket)*	如果数据到达,那么receive()方法将返回,并将数据封装到数据包对象中;*5.从数据包中读取数据*/publicclassReceive{publicstaticvoidmain(String[]args)throwsIOException{//构造一个DatagramSocket(端口号)DatagramSocketsocket=newDatagramSocket(255);//准备一个空的byte[]数组,准备接收数据;byte[]byteArray=newbyte[1024];//准备一个空的数据包,DatagramPacket,用来接收数据;DatagramPacketpck=newDatagramPacket(byteArray,byteArray.length);//等待数据到达System.out.println("正在等待信息到达。。。");socket.receive(pck);//程序在此会阻塞System.out.println("有信息到达");//获取数据byte[]byteInfo=pck.getData();Stringstr=newString(byteInfo,0,pck.getLength());Stringip=pck.getAddress().getHostAddress();System.out.println("接收到信息:IP:"+ip+"内容"+str);socket.close();}}
   
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: