首页 > 代码库 > 黑马程序员_网络编程

黑马程序员_网络编程

 

IP地址

1、IP地址的分类

A类1.0.0.0到126.0.0.0

B类128.1.0.0到191.254.0.0

C类192.0.1.0到223.255.254.0

D类224.0.0.0到239.255.255.255

E类240.0.0.0到255.255.255.254

局域网内的IP 192.168开头

本地回环地址:127.0.0.1。本机的IP地址,只要网卡工作正常,127.0.0.1

2、java.net.InetAddress

描述IP地址对象的类,没有构造方法

InetAddress类中的方法:

  static InetAddress getLocalHost() 返回本机IP地址对象

  String getHostName() 返回主机名

  String getHostAddress() 返回主机对应的IP地址

  static InetAdress  getByName(String 主机名) 获取到的是主机名对应的IP地址

3、端口号

如果一个程序占用了一个端口,别的程序将不能使用这个端口了

0-65535:可使用的端口号

0-1024:系统的保留端口号

 80:互联网访问的默认端口号

21:FTP上传端口号

3306:MySQL数据库的连接端口

1521:Oracle数据库的连接端口

1433:MS SQLServer数据库的连接端口

 

 

通讯协议

1、UDP协议

UDP协议的特点:

  面向无连接

  不安全,数据可能丢失

  数据限制在64KB以内

  速度快

适合做即使通讯,如:飞秋、qq、MSN

2、Socket服务

  通讯工具,通信双方必须有Socket服务。将你的数据传递给Socket传输工具,将数据发送出去,接受者也是通过Socket工具

  来接受发来的数据。

  DategramPacket数据包对象

  DategramSocket,UDP的通信工具,发送数据和接受数据

3、UDP发送端的操作

  将数据封装成数据包DategramPacket  DategramSocket(数组,数组长度,目的IP地址,接受方端口号)

  建立通信工具DategramSocket对象

  将数据包交给工具DategramSocket进行发送

  关闭资源

  

 1 import java.net.*; 2 public class UDPSend { 3     public static void main(String[] args)throws Exception { 4      5         byte[] bytes = "你好UDP".getBytes(); 6         //创建数据包对象 7         DatagramPacket dp = new  8                 DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"),8000); 9         //创建通信工具Socket服务,DataGramSocket10         DatagramSocket ds = new DatagramSocket(10000);11         //调用ds的send方法,传递数据包12         ds.send(dp);13         //关闭资源14         ds.close();15     }16 }

 

4、UDP的接受端的操作

  建立数据包对象,接受发送的数据包

  建立通信工具DategramSocket对象   DategramSocket(字节数组,长度)

  将数据包交给工具DategramSocket进行接受  receive(数据包)

  将数据包进行拆开

    拆包:

      将字节数组变成字符串

      DategramPacket类中的方法getLength()发送的有效字节数

      DategramPacket类中的方法getPort()发送方的端口号

      DategramPacket类中的方法getAddress()获取发送方的IP地址对象InetAddress类型,

      getHostAddress()用这个IP对象获取IP地址  

  关闭资源

 1 import java.net.*; 2 public class UDPReceive { 3     public static void main(String[] args) throws Exception{ 4         byte[] bytes = new byte[10]; 5         //创建数据包 6         DatagramPacket dp = new DatagramPacket(bytes, bytes.length); 7         //建立通信工具,打开端口,监听一个端口 8         DatagramSocket ds = new DatagramSocket(8000); 9         //调用ds的receive(数据包)10         ds.receive(dp);//接收的方法,线程等待效果11         //获取有效字节数12         int length = dp.getLength();13         //端口号14         int port = dp.getPort();15         //发送的IP对象16         String ip = dp.getAddress().getHostAddress();17         System.out.println(new String(bytes,0,length )+"  "+ip+"  "+port);18         //关闭资源19         ds.close();20     }21 }

 

5、TCP的协议

 TCP协议的特点:

  面向连接

  安全

  适合大数据传输

  三次握手,速度慢

适合做安全的数据传输,如:下载,在线视频

IO的数据传输都是字节流,通过Socket连接对象获取,不能自己创建

 

6、TCP的客户端的操作

  创建连接对象Socket Socket("IP",端口号)

  通过Socket对象获取字节输出流,将数据发送到服务器

  通过Socket对象获取字节输入流,读取服务器发回的数据

  关闭资源

 1 import  java.io.*; 2 import java.net.*; 3 public class FileClient { 4     public static void main(String[] args) throws Exception { 5         Socket s = new Socket("192.168.1.102",8100); 6         FileInputStream fis = new FileInputStream("e:\\2.jpg"); 7         OutputStream out= s.getOutputStream(); 8         int line=0; 9         byte[] bytes =new byte[1024];10         while((line=fis.read(bytes))!=-1){11             out.write(bytes,0,line);12         }13 //        结束标记14         s.shutdownOutput();15         InputStream in  = s.getInputStream();16         line= in.read(bytes);17         System.out.println("服务器说:::"+new String(bytes,0,line));18         fis.close();19         s.close();20     }21 }

 

7、TCP的服务器端的操作

  建立服务器的连接对象SeverSocket

  获取客户端的连接对象,知道那个客户端和服务器连接,SeverSocket类的方法accept

  获取到了客户端的连接对象,可以从客户端的连接对象Socket获取对象  

 

 1 import java.io.*; 2 import java.net.*; 3 import java.util.*; 4 public class FileServer { 5     public static void main(String[] args)throws Exception { 6         ServerSocket ss = new ServerSocket(8100); 7         Socket s = ss.accept(); 8         InputStream in = s.getInputStream(); 9         File file = new File("d:\\a");10         if(!file.exists())11             file.mkdirs();12         String filename=System.currentTimeMillis()+ new Random().nextInt(100)+".jpg";13         FileOutputStream fos = new FileOutputStream(file+File.separator+filename);14         int line=0;15         byte[] bytes =new byte[1024*1000];16         while((line=in.read(bytes))!=-1){17             fos.write(bytes,0,line);18         }19         OutputStream out = s.getOutputStream();20         out.write("上传成功".getBytes());21         fos.close();22         s.close();23         ss.close();24     }25 }

 

黑马程序员_网络编程