黑马程序员技术交流社区

标题: UDP和TCP总结 [打印本页]

作者: xiaoxinxin003    时间: 2015-7-9 02:35
标题: UDP和TCP总结
使用UDP建立接收和发送端
        重点在于掌握UDP的接收端和发送端的建立流程。
        定义UDP发送端步骤:
        1.建立udpsocket服务。
        2.提供数据并将数据封装到数据包中。
        3.通过socket服务的发送功能将数据包发送出去。
        4.关闭资源。
        定义UDP接收端步骤:
        定义UDP接收端
        1.定义udpsocket服务。通常会监听一个端口,其实就是给这个接收网络
        应用程序定义一个数字标识,方便明确哪些数据过来
        该应用程序可以处理
        2.定义一个数据包,因为要存储接收到的字节数据,因为数据包对象中

        3.通过socket服务的receive方法将受到的数据存入已经定义好的数据包中
        4.通过数据包对象的特有功能,将这些不同的数据取出,打印在控制台。
        5.关闭资源。

        代码实例:UDP发送端
  1. import java.net.*;
  2. class UdpSend
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 //创建udp服务。通过DatagramSocket对象
  7.                 DatagramSocket ds=new DatagramSocket();

  8.                 //2.确定数据,并封装成数据包。
  9.                 byte[] buf="ge men lai le".getBytes();
  10.                 DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.102"),123);

  11.                 //3.通过socket服务将已有的数据包发送出去。通过send方法
  12.                 ds.send(dp);

  13.                 //4.关闭资源。
  14.                 ds.close();

  15.         }
  16. }
复制代码

代码实例:UDP接收端
  1. class UdpRec
  2. {
  3.         public static void main(String[] args) throws Exception
  4.         {
  5.                 //1.创建udp socket。建立端点
  6.                 DatagramSocket ds=new DatagramSocket(123);

  7.                 while(true)
  8.                 {
  9.                         //2.定义数据包。用于存储数据。
  10.                 byte[] buf=new byte[1024];
  11.                 DatagramPacket dp=new DatagramPacket(buf,buf.length);

  12.                 //3.通过服务的receive方法将收到的数据存到数据包中
  13.                 ds.receive(dp);

  14.                 //4.通过数据包的方法获取其中数据
  15.                 String ip=dp.getAddress().getHostAddress();

  16.                 String data=new String(dp.getData(),0,dp.getLength());

  17.                 int port=dp.getPort();

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

  19.                 //5.关闭资源
  20.                 //ds.close();
  21.                 }
  22.         }
  23. }
复制代码

TCP传输
        TCP分为客户端和服务端,客户端对应的对象时Socket,
        服务端对应的对象时ServerSocket.
        客户端:
        在建立Socket对象时就可以去连接指定主机。
        因为TCP是面向连接的。所以在建立Socket服务时。
        就要有服务端存在。并连接成功。形成通路
        在该同道中进行数据传输。
        客户端步骤:
        1.创建Socket服务。并制定要连接的主机和端口。
        2.为了发送数据。应该获取socket流中的输出流。
        3.将数据写入到获取的输出流中
        4.关闭资源

        服务端:
        1.建立服务端的socket服务。ServerSocket();
        并监听一个端口
        2.获取链接过来的客户端对象。
        通过ServerSocket的accept方法。这个方法
        是阻塞式的。
        3.客户端发过来数据。服务端使用对应的客户端对象
        并获取到该客户端的读取流。
        并打印在控制台。
        4.关闭服务端(可选)
        客户端示例代码:带反馈信息
  1. class TcpClient
  2. {
  3.         public static void main(String[] args)throws Exception{
  4.                 //建立客户端服务,制定主机和端口号
  5.                 Socket s = new Socket("192.168.0.102",10001);
  6.                 //获取输出流
  7.                 OutputStream out = s.getOutputStream();
  8.                 //将数据写入到获取的输出流中
  9.                 out.write("Tcp Demo".getBytes());
  10.                 //获取读取流,用来接收服务端返回信息
  11.                 InputStream in=s.getInputStream();
  12.                 //创建缓冲区,读取服务端信息并打印
  13.                 byte[] buf=new byte[1024];
  14.                 int len=in.read(buf);
  15.                 System.out.println(new String(buf,0,len));
  16.                 //关闭资源
  17.                 s.close();
  18.         }
  19. }
复制代码
服务端示例代码:接收成功给客户端返回信息
  1. class TcpServer
  2. {
  3.         public static void main(String[] args)throws Exception{
  4.                 //建立服务端,监听端口号。
  5.                 ServerSocket ss = new ServerSocket(10001);
  6.                 //接收链接过来的客户端对象
  7.                 String s = ss.accept();
  8.                 //获取一下客户端IP并打印
  9.                 String ip = s.getInetAddress().getHostAddress();
  10.                 System.out.println(ip+"*****connect");
  11.                 //使用对应的客户端获取该客户端的读取流
  12.                 InputStream in = s.getInputStream();
  13.                 byte[] buf = new byte[1024];
  14.                 //读取客户端数据并打印。
  15.                 int len = in.read(buf);
  16.                 System.out.println(new String(buf,0,len));
  17.                 //获得输出流,用来给客户端返回信息
  18.                 OutputStream out=s.getOutputStream();
  19.                 //将需要反馈的信息写入到输出流
  20.                 out.write("Server Accepted Data ok!".getBytes());
  21.                 //关闭资源
  22.                 s.close();
  23.                 //ss.close();

  24.         }
  25. }
复制代码





作者: 吃荷包蛋    时间: 2015-7-9 09:52
正好碰到一道这样的题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2