Java基础知识:网络编程

本文介绍了Java中的网络编程基础知识,包括UDP和TCP两种协议的特点。UDP是一种无连接、不可靠的数据包通信协议,适合对速度要求高但对数据完整性要求不高的场景。TCP则提供安全的连接,通过建立连接来传输大量数据,但效率较低。文章还提供了UDP发送和接收数据的示例代码,以及TCP客户端和服务端的简单实现。在实际编程中,需先启动服务端,确保客户端和服务端的端口号匹配,以保证数据通信的正常进行。
摘要由CSDN通过智能技术生成


黑马程序员---------Java基础知识:网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


        在现在的应用当中,有很多出现需要进行网络间的数据传输,因而也要求我们需要掌握网络编程。

    网间通信目前我们学到的有两种,一种是UDP,一种是TCP。TCP我们都比较熟悉,在计算机里面经常可以看到有TCP/IP字样,而UDP则比较少了解。

    先说说UDP协议,UDP是一个不安全的数据包通信协议。不安全是指不需要双方网络一定处于连接状态才可以发送数据。数据包通信则指的数计算机把数据打包成最大为64K的数据包发送出去。这个协议的好处在于速度快,不需要连接。

    TCP协议是建立在网间连接形成数控传输通道,在数据通道中进行大量的数据传输。这种连接是安全的,但是因为需要通信双方必须形成通道,所以是比较安全的。缺点是效率比较低。

 在网络编程中一个很重要的类时Socket.这是为网络服务提供的一种机制,只有在双方都有Socket的情况下,两台计算机之间才能进行通信。Socket就像是一个接口,在网间形成通道。

    UDP传输编程过程如下。

1.    UDP通信,数据在Datagramsocket 和DatagramPachet间传输,Datagramsocket主要用于接收数据,DatagramPachet用于将数据打包发送出去,所以第一步明白如何定义这两个对象。

2.    建立接收端和发送端

3.    建立数据包,就是将要发送的数据打包。

4.    调用Socket的发送接收方法,接收或发送数据。

5.    关闭socket.

需要注意的是发送端和接收端必须是两个独立的程序,就像两台电脑一样。下面就以一段程序示例这个过程。

/**

     * 需求:通过UDP传输方式,将一段文字发送出去,

     * 思路:建立udpsocket服务

     * 提供数据,并将数据封装到数据包中

     * 通过socket服务发送功能就数据包发送出去

     * 关闭资源

     * @throws SocketException

     */

   public static void sendUDP() throws Exception //发送端

   {

      //建立服务。通过datagramsocket对象

      DatagramSocket ds =new DatagramSocket();

      

      //确定数据,并封装成数据包使用Datagrampacket

      byte[] data ="这里是需要发送的数据".getBytes();

      DatagramPacket dp =new DatagramPacket(data,data.length,InetAddress.getByName("10.198.1.10"),10000);//

      //"10.198.1.10"是目的地的IP地址,10000是目的地的端口号

      //通过socket发送数据

      ds.send(dp);

      //关资源

       ds.close();

  }

 

/**

   * 需求:

   * 定义一个应用程序,用于接收Udp协议传输的数据并处理

   * 思路

   * 定义UDPSOCKET服务

   * 定义socket服务时通常要监听一个端口,其实就是给则天接收网络应用程序定义数字标识

   * 方便于明确哪些数据过来该应用数据应用程序

   * 定义一个数据包,因为要存储接收到的字节数据,因为数据包邮更多功能可以提取字节数据包内数据

   * 通过socket服务的rec方法将接收到的数据存入已定义好的数据包中;

   * 通过数据包的对象的特有功能,将这些不同的数据提取出来

   * 关闭资源

   */

   public static void receUDP()throws Exception

   {

      //创建

      DatagramSocket s= new DatagramSocket(10000);//一定要写监听端口。

      //定义数据包用于存储数据

      byte[] buf =new byte[1024];

      DatagramPacket data = new DatagramPacket(buf,buf.length);

    //通过服务的rece方法将接收到的数据传入数据包中

      s.receive(data);

      

      //通过方法处理数据

      String ip = data.getAddress().getHostAddress();//获取IP

      String data1 = new String (data.getData(),0,data.getLength());//获取数据

      int port =data.getPort();//获取端口

      System.out.println(ip+":"+data1+":"+port);

      

      s.close();//记得关

  }

其中还有几个语句是比较常用的:

InetAddress i =InetAddress.getLocalHost();//获取主机地址,主机名

System.out.println(i.toString());//PC-20141128EVUO/10.198.1.10

System.out.println("主机名:"+i.getHostName());//

System.out.println("主机地址:"+i.getHostAddress());

    TCP传输编程过程如下。

1.TCP通信,数据在Socket 和ServerSocket间传输,Socket是客户端,ServerSocket则是服务器,先确定客户端做什么,服务器做什么。

2.建立客户端和服务端

3.建立连接后通过Socket中IO流进行数据传输。

4.关闭socket.

下面例程演示下这个过程

import java.net.*;

import java.io.*;

/**

 * 演示TCP传输的客户端和服务端的互访

 *

 * 需求

 * 客户端给服务端发送数据,服务端收到后给客户端反馈信息

 *

 *

 * 客户端:

 * 建立socket服务,指定要连接的主机和端口

 * 2获取流中的输出流,将数据写到流中,发送数据

 * 3获取输入流,将服务端反馈是数据获取,并打印

 * 关闭客户资源

 *

 * @author Administrator

 *

 */

 class TCP2R{//客户端

 

    public static void main(String[] args) throws Exception{

       // TODO Auto-generated method stub

     Socket s= new Socket("10.198.1.7",1004);//目的IP和端口

     OutputStream out =s.getOutputStream();//使用输出流

     out.write("我是客户".getBytes());//写数据

    

     InputStream in = s.getInputStream();//使用输入流

     byte[] buf= new byte[1024];

     int line =in.read(buf);//读数据

     System.out.println(new String(buf,0,buf.length));

     s.close();

    }

 

}

 class TCP2Server{//服务端

 

       public static void main(String[] args) throws Exception{

           // TODO Auto-generated method stub

           ServerSocket ss=new ServerSocket(10004);//监控的端口

           Socket s = ss.accept();//获取客户端对象

           String ip =s.getInetAddress().getHostAddress();

            System.out.println(ip+"连接");

          

            InputStream in =s.getInputStream();//获取输入流        

            byte[] buf = new byte[1024];

            int line =in.read(buf);

            System.out.println(new String(buf,0,line));

            

            OutputStream out =s.getOutputStream();

            out.write("客户,我已经收到数据".getBytes());        

            s.close();

            ss.close();

       }

 

    }

这个过程当中,必须先运行服务端,然后才能运行客户端,这样才能保证数据通信的正常。还有就是客户端目的端口一定要和服务端监控端口一致,否则采集不到数据。在编程过程中一定要明确客户端和服务端的作用。客户端和服务端的语句有点不一样,所以不要弄乱了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值