zoukankan      html  css  js  c++  java
  • JAVA基础学习网络编程<一>

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

    /**
    *端口:对应用程序进行数字标识,以方便对方发送数据到指定的应用程序上
    *通信协议:TCP/IP
    *IP:127.0.0.1:本地回环地址,192.168.1.255广播地址,局域网
    *网络模型:
    *应用层、表示层、会话层、传输层(TCP、UDP)、网络层、数据链路层、物理层
    *描述IP的类:InetAddres
    *方法:getLocalHost返回主机名和IP地址
    *      getHostName返回主机名
    *      getByName(ip)获取指定ip的主机名 *           
    *端口:0到65535之间的数字*
    *TCP
    *建立连接,形成传输数据的通道;
    *在连接中进行大数据量的传输;
    *通过三次握手完成连接,是可靠的协议;
    *必须建立连接,效率会稍低
    *
    *UDP
    *将数据及源和目的封装成数据包,不需要建立连接;
    *每个数据报的大小限制在64k内;
    *因为面向无连接,是不可靠协议;
    *不需要建立连接,速度快
    */
    /**
    * Socket网络编程最重要的部分
    * 插座,应用软件通信机制,通信的前提
    *传输协议不同,建立Socket也不一样
    *UDP用的插座的建立:DatagramPacket:数据报包,既能发送又能接受,用来实现投递服务
    *send、receive
    *
    * @author shantui
    *
    */
    /**
    * 通过UDP发送一段文字
    * 1.建立updsocket服务
    * 2.提供数据,并封装到数据包中
    * 3.通过soceket发送出去
    * 4.关闭资源
    */

    基于UDP传输的UDP发送端代码

    DatagramPacket(byte[] buf, int offset, int length, InetAddressaddress, int port)

    zh_cn

    构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buf.length

       1: package nettest;
       2:  
       3: import java.io.BufferedReader;
       4: import java.io.InputStreamReader;
       5: import java.net.DatagramPacket;
       6: import java.net.DatagramSocket;
       7: import java.net.InetAddress;
       8:  
       9: public class UdpSend 
      10: {
      11:     public static void main(String[] args)throws Exception
      12:     {
      13:         /*
      14:         DatagramSocket ds =new DatagramSocket(8888);
      15:         byte[] buf="dfaljahello".getBytes();
      16:         //构造数据报包,将长度为length的包发送到指定主机的指定端口上
      17:         DatagramPacket dp =
      18:                 new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),20010);
      19:         ds.send(dp);    
      20:         */
      21:         //采用键盘录入方式:读一句发一句
      22:         DatagramSocket ds =new DatagramSocket(8888);
      23:         //标准键盘录入代码
      24:         String line=null;
      25:         BufferedReader bufr=
      26:                 new BufferedReader(new InputStreamReader(System.in));
      27:         while((line=bufr.readLine())!=null)
      28:         {
      29:             if("886".equals(line))
      30:                 break;
      31:             byte[] buf=line.getBytes();
      32:             DatagramPacket dp =
      33:                     new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10011);
      34:             ds.send(dp);                
      35:         }
      36:         ds.close();
      37:         
      38:          
      39:     }
      40:  
      41: }

    接收端代码

       1: package nettest;
       2:  
       3: import java.net.DatagramPacket;
       4: import java.net.DatagramSocket;
       5:  
       6: /** 
       7:  * 定义一个用于接受基于udp协议的数据并处理 
       8:  * 1.定义udpsocket服务,同时指定监听的端口,只收这个端口过来的数据
       9:  * 2.定义一个数据包,因为要存储接受到的数据
      10:  * 3.通过receive将收到的数据存入定义好的数据包中
      11:  * 4.通过数据包对象特有功能,取出数据并打印
      12:  * 5.关闭资源
      13:  */
      14: public class UdpRece 
      15: {
      16:     public static void main(String[] args) throws Exception
      17:     {
      18:         DatagramSocket ds =new DatagramSocket(10011);
      19:         while(true)
      20:         {        
      21:         byte[] buf =new byte [1024];
      22:         DatagramPacket dp=new DatagramPacket(buf,buf.length);
      23:         ds.receive(dp);
      24:         String ip=dp.getAddress().getHostAddress();
      25:         String data= new String(dp.getData(),0,dp.getLength());
      26:         int port=dp.getPort();
      27:         System.out.println(ip+".."+data+".."+port);            
      28:         }
      29:     }
      30:  
      31: }

    编写一个聊天室的程序

       1: package nettest;
       2:  
       3: import java.io.BufferedReader;
       4: import java.io.InputStreamReader;
       5: import java.net.DatagramPacket;
       6: import java.net.DatagramSocket;
       7: import java.net.InetAddress;
       8:  
       9: /**
      10:  * 编写聊天程序
      11:  * 有接受和发送数据的部分
      12:  * 这两部分需要同时执行
      13:  * 利用多线程技术
      14:  * 一个线程控制收,一个线程控制发
      15:  * 因为收发动作不一致,所以定义两个run方法
      16:  * 还要封装到不同的类中
      17:  */
      18:  
      19: public class ChatDemo 
      20: {
      21:  
      22:     public static void main(String[] args) throws Exception
      23:     {
      24:         DatagramSocket sendSocket =new DatagramSocket();
      25:         DatagramSocket receSocket =new DatagramSocket(10013);
      26:         new Thread(new Send(sendSocket)).start();
      27:         new Thread(new Send(receSocket)).start();
      28:         
      29:     }
      30:  
      31: }
      32: class Send implements Runnable
      33: {
      34:     private DatagramSocket ds;
      35:     public Send(DatagramSocket ds)
      36:     {
      37:         this.ds=ds;
      38:     }
      39:     public void run()
      40:     {
      41:         try {
      42:             String line=null;
      43:             BufferedReader bufr=
      44:                     new BufferedReader(new InputStreamReader(System.in));
      45:             while((line=bufr.readLine())!=null)
      46:             {
      47:                 if("886".equals(line))
      48:                     break;
      49:                 byte[] buf=line.getBytes();
      50:                 DatagramPacket dp =
      51:                         new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.254"),10013);
      52:                 ds.send(dp);                
      53:             }
      54:         } catch (Exception e) {
      55:             throw new RuntimeException("发送失败");
      56:         }
      57:     }
      58: }
      59: class Rece implements Runnable
      60: {
      61:     private DatagramSocket ds;
      62:     private Rece(DatagramSocket ds)
      63:     {
      64:         this.ds=ds;
      65:     }
      66:     public void run()
      67:     {
      68:         try {    
      69:             while(true)
      70:             {        
      71:             byte[] buf =new byte [1024];
      72:             DatagramPacket dp=new DatagramPacket(buf,buf.length);
      73:             ds.receive(dp);
      74:             String ip=dp.getAddress().getHostAddress();
      75:             String data= new String(dp.getData(),0,dp.getLength());
      76:             //int port=dp.getPort();
      77:             System.out.println(ip+".."+data);            
      78:             }
      79:         } catch (Exception e) {
      80:             throw new RuntimeException("接收失败");
      81:         }
      82:     }
      83: }

    基于TCP协议,传输文字,分为:客户端和服务端

       1: package nettest;
       2:  
       3: import java.io.InputStream;
       4: import java.io.OutputStream;
       5: import java.net.ServerSocket;
       6: import java.net.Socket;
       7:  
       8: /*
       9:  * TCP分客户端和服务端
      10:  * Socket构造的时候,一 建立就要找对应的服务端 
      11:  * 创建socket服务并指定要连接 的主机和端口
      12:  * 
      13:  */
      14: }
      15: class Clinet
      16: {
      17:    public static void main(String[] args) throws Exception
      18:     {
      19:     //建立客户端socket服务,并指定要连接 的主机和端口
      20:      * 
      21:     Socket s=new Socket("192.168.1.254",10003);
      22:     
      23:      OutputStream out = s.getOutputStream();
      24:      out.write("fadjfdasjafasfjdsafd".getBytes());
      25:      s.close();
      26:      }
      27:     
      28: }
      29: class Server
      30: {
      31:     public static void main(String[] args)throws Exception
      32:     {
      33:         //建立服务端socket服务,并监听一个端口
      34:         ServerSocket ss=new ServerSocket(10003);
      35:         //通过accept方法获取连接过来的客户端对象
      36:         Socket s= ss.accept();
      37:         //获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据
      38:         InputStream in=s.getInputStream();
      39:         byte[] buf=new byte[1024];
      40:         int len =in.read(buf);
      41:         System.out.println(new String(buf,0,len));            
      42:     }
      43: }
  • 相关阅读:
    【刷题】UOJ #274 【清华集训2016】温暖会指引我们前行
    【刷题】BZOJ 3669 [Noi2014]魔法森林
    【刷题】BZOJ 2594 [Wc2006]水管局长数据加强版
    (84)Wangdao.com第十八天_JavaScript 文档对象模型 DOM
    (84)Wangdao.com第十八天_JavaScript Promise 对象
    (83)Wangdao.com第十七天_JavaScript 定时器
    (82)Wangdao.com第十六天_JavaScript 异步操作
    (81)Wangdao.com第十六天_JavaScript 严格模式
    (80)Wangdao.com第十六天_JavaScript Object 对象的相关方法
    (79)Wangdao.com第十五天_JavaScript 对象的继承_prototype原型对象_封装_函数式编程
  • 原文地址:https://www.cnblogs.com/94007boy/p/2690121.html
Copyright © 2011-2022 走看看