疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

网络编程基础


 

网络编程基础
1.网络编程: 多台计算机通过物理设备(网线,wifi等)链接起来,形成了一个网络结构。
 
 
 
2.网络编程的三要素:
 
  IP地址:即计算机在网络中的编号.
 
 
 
  端口号:即程序在计算机中的一个编号。0--65535,1024之前的端口号禁止使用。
 
 
 
  网络协议:分为UDP协议和TCP协议
 
    UDP协议:不需要建立稳定的链接,不可靠,安全性低,但效率高,大小有限制(64k)。
 
    TCP协议:必须建立连接,安全性高,速度慢,效率低,大小无限制。
 
 
 
3.InetAddress:java中用来表示ip地址
  static InetAddress getByName(String host); //host可以是主机名,也可以是Ip地址
  String getHostAddress(); //返回 IP 地址字符串(以文本表现形式)。 
  String getHostName(); //获取主机名。 
  static InetAddress getLocalHost(); //获取本机的ip地址
 
4.网络编程UDP协议-发送端
  步骤:
  1.创建发送端Socket对象(DatagramSocket)。因为是发送端的Socket,所以不需要指定端口号
  2.准备数据,并且打包。DatagramPacket
  3.发送数据
  4.释放资源
  案例:
 
复制代码
 1       //1.创建发送端Socket对象(DatagramSocket)。因为是发送端的Socket,所以不需要指定端口号
 2     DatagramSocket ds = new DatagramSocket();
 3     //2.准备数据,并且打包。DatagramPacket
 4     //准备数据
 5     byte[] bys = "hello udp,im comming!".getBytes();
 6     //指定接收方(收件人)的ip地址
 7     InetAddress address = InetAddress.getByName("127.0.0.1");
 8     //端口号
 9     int port = 8888;
10     DatagramPacket dp = new DatagramPacket(bys,bys.length,address,port);
11     //3.发送数据
12     ds.send(dp);
13     //4.释放资源
14     ds.close();
复制代码
 
 
 
    
 
5.网络编程UDP协议-接收端
  步骤:
  1.创建接收端的Socket对象(DatagramSocket)。因为是接收端,所以要明确自己是谁(端口)
  2.准备容器。DatagramPacket
  3.接收数据。签收
  4.解析
  5.释放资源
    案例:
 
复制代码
 1 //1.创建接收端的Socket对象(DatagramSocket)。因为是接收端,所以要明确自己是谁(端口),该端口号必须和发送端的完全一致。
 2     DatagramSocket ds = new DatagramSocket(8888);
 3     //2.准备容器。DatagramPacket
 4     //byte[] bys = new byte[1024];
 5     //DatagramPacket dp = new DatagramPacket(bys,bys.length);
 6     DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
 7     //3.接收数据。签收。如果没有人发送数据,则程序在这里一直等待,直到有人发送数据。
 8     ds.receive(dp);
 9     //4.解析。当数据被接收之后,都放在了DatagramPacket中,所以,所谓的解析数据,其实就是解析DatagramPacket
10     InetAddress address = dp.getAddress(); //获取发送方的ip地址
11     int port = dp.getPort(); //获取发送方的端口号
12     byte[] data = dp.getData(); //获取发送的数据    
13     int length = dp.getLength(); //获取具体收到数据的长度
14     System.out.println("sender ---> " + address.getHostAddress());
15     System.out.println(new String(bys,0,length));
16     System.out.println(port);
17     //5.释放资源
18     ds.close();
复制代码
 
 
 
    
 
6.网络编程TCP协议-客户端
  步骤:
  1.创建Socket对象。指定“服务端”的ip地址和端口号
  2.传输数据
  如果给“服务端”发消息,用输出流写。
  如果接收“服务端”发送的数据,则用输入流读。
  3.释放资源
    案例:
    
 
复制代码
 1 //1.创建Socket对象。指定“服务端”的ip地址和端口号
 2     Socket s = new Socket("127.0.0.1", 10010);
 3     // 给服务端发消息
 4     OutputStream os = s.getOutputStream();
 5     os.write("hello!!!".getBytes());
 6     os.close();
 7 
 8     // 接收“服务端”发送过来的数据
 9     InputStream is = s.getInputStream();
10     byte[] bys = new byte[1024];
11     int len = is.read(bys);
12     System.out.println(new String(bys, 0, len));
13 
14     //3.释放资源
15     s.close();
复制代码
 
 
 
 
 
 
6.网络编程TCP协议-服务端
  步骤:
  1.创建ServerSocket对象,指定端口号
  2.调用accept()方法获取Socket对象。如果有客户端访问,则该方法执行,得到一个Socket。如果没有客户端访问一直等待。
  3.传输数据
  如果给“客户端”发消息,用输出流写。
  如果接收“客户端”发送的数据,则用输入流读。
  4.释放资源
    案例:
    
 
复制代码
 1 //1.创建ServerSocket对象,指定端口号
 2     ServerSocket ss = new ServerSocket(10010);
 3     //2.调用accept()方法获取Socket对象。如果有客户端访问,则该方法执行,得到一个Socket。如果没有客户端访         问,就一直等待。
 4     Socket s = ss.accept();    
 5     //接收“客户端”发送过来的数据
 6     InputStream is = s.getInputStream();
 7     byte[] bys = new byte[1024];
 8     int len = is.read(bys);
 9     System.out.println(new String(bys,0,len));
10 
11     //向“客户端”发送数据    
12     OutputStream os = s.getOutputStream();
13       os.write("hello!!!".getBytes());
14     os.close();
15 
16     s.close();
复制代码