Socket编程基本概念----imooc(3)

3 篇文章 0 订阅
3 篇文章 0 订阅

第4章 通过Socket 实现UDP编程

@(JAVA)[socket, java]


Socket编程基本概念—-imooc(1)
Socket编程基本概念—-imooc(2)
Socket编程基本概念—-imooc(3)


4-1 DatagramPacket & DatagramSocket 简介

  • UDP协议(用户数据报协议)是无连接,不可靠的,无序的
  • 以数据报作为载体,传输时,首先将要传输的数据定义成数据报(Datagram),在数据报中指明数据所要达到的Socket(主机地址和端口号),然后再将数据报发送出去
  • 相关操作类:DatagramPacket(表示数据报包) & DatagramSocket:进行端到端通信的类

4-2 编程实现基于UDP的Socket通信之服务器端

  • 服务器端实现步骤:
    • 创建DatagramSocket,指定端口号
    • 创建DatagramPacket,接受客户端信息
    • 接收客户端发送的数据信息
    • 读取数据
  • 客户端实现步骤

    • 定义发送信息
    • 创建DatagramPacket,包含将要发送的信息
    • 创建DatagramSocket
    • 发送数据
  • 实例

服务端
package imooc.socket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * Created by yibo on 2016/9/20.
 *
 * server, 实现基于UDP的用户登录
 */
public class UDPServer {

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

        /**
         * 接受客户端发送的数据
         */
        //1 create server DatagramSocket , assign pork
        DatagramSocket socket = new DatagramSocket(8800);
        //2 create datagram, to receive client data
        byte[] data =new byte[1024]; //创建字节数组,指定接受的数据包的大小
        DatagramPacket packet = new DatagramPacket(data,data.length);
        //3 receive client data
        System.out.println("**** server already done ,wait client ***");
        socket.receive(packet); //此方法在接收到数据报之前会一直阻塞
        //4 读取数据
        String info = new String(data,0,packet.getLength());
        System.out.println("I am server, client say: "+ info);

        /**
         * 向客户端响应数据
         */
        //1 定义客户端的地址 端口号 数据
        InetAddress address = packet.getAddress();
        int port = packet.getPort();
        byte[] data2 = "welcome !".getBytes();
        //2 create datagram , 包含响应的数据信息
        DatagramPacket packet2 = new DatagramPacket(data2,data2.length,address,port);
        //3 响应客户端
        socket.send(packet2);
        //4 close resouce
        socket.close();

    }
}
客户端
package imooc.socket;

import java.io.IOException;
import java.net.*;

/**
 * Created by yibo on 2016/9/20.
 *
 * 客户端, 实现基于UDP的用户登录
 */
public class UDPClinet {
    public static void main(String[] args) throws IOException {
        /**
         * 向服务区端发送数据
         */
        //1 定义服务器的地址,端口号,数据
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8800;
        byte[] data = "username: admin; password:123".getBytes();
        //2 create datagram, 包含要发送的数据信息
        DatagramPacket packet = new DatagramPacket(data,data.length,address,port);
        //3 create DatagramSocket
        DatagramSocket socket= new DatagramSocket();
        //4 sent datagram to server
        socket.send(packet);

        /**
         * 接受服务器端响应的数据
         */
        //1 create datagram, 用于接受服务器端响应的数据
        byte[] data2 = new byte[1024];
        DatagramPacket packet2  = new DatagramPacket(data2,data2.length);
        //2 接收服务器响应的数据
        socket.receive(packet2);
        //3 读取数据
        String reply = new String(data2,0,packet2.getLength());
        System.out.println("im client , server say : "+reply);
        //4 close resource
        socket.close();

    }
}
output(server):
**** server already done ,wait client ***
I am server, client say: username: admin; password:123
output(client):
I'm client , server say : welcome !
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值