zoukankan      html  css  js  c++  java
  • android socket编程之UDP

    socket是基于tcp和upd的,而tcp和udp是基于ip协议,

    客户端:

    package com.sunfb.upd;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.net.SocketException;
    import java.net.UnknownHostException;
    
    public class ServerClient {
        DatagramSocket cDatagramSocket=null;
        DatagramPacket cDatagramPacket=null;
        DatagramPacket receiverResponseDatagramPacket=null;
        byte[] b=new byte[1024];
        public ServerClient(){
            try {
                cDatagramSocket=new DatagramSocket();
            } catch (SocketException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
        
        
        public DatagramPacket send(String host,int port,byte[] bytes){
            try {
                cDatagramPacket=new DatagramPacket(bytes, 0, bytes.length, InetAddress.getByName(host), port);
                cDatagramSocket.send(cDatagramPacket);
            
            } catch (UnknownHostException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return cDatagramPacket;
        }
        public String receiverResponse(){
            
            receiverResponseDatagramPacket=new DatagramPacket(b, b.length);
            try {
                cDatagramSocket.receive(receiverResponseDatagramPacket);
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            System.out.println("我是客户端 这是我从服务器的到的返回信息:"+new String(receiverResponseDatagramPacket.getData()));
            return new String(receiverResponseDatagramPacket.getData());
            
        }
        
        public static void main(String[] args) {
            ServerClient serverClient=new ServerClient();
            String host="192.168.0.196";
            int port=8826;
            String str="sunfb孙凤彪来也 接招吧";
            while(true){
            serverClient.send(host, port, str.getBytes());
            serverClient.receiverResponse();
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            }
        }
    
    }

    服务端:

    package com.sunfb.upd;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.net.SocketException;
    
    public class ServerSocket {
        DatagramSocket datagramSocket=null;
        DatagramPacket datagramPacket=null;
        DatagramPacket responseDatagramPacket=null;
        InetSocketAddress inetSocketAddress=null;
        
        byte[] b=new byte[1024];
        
        public ServerSocket(String host,int port){
            //初始化 、
            inetSocketAddress=new InetSocketAddress(host, port);
            try {
                datagramSocket=new DatagramSocket(inetSocketAddress);
            } catch (SocketException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
        }
        public String receive(){
            String receiveStr=null;
            datagramPacket=new DatagramPacket(b, b.length);
            try {
                System.out.println("服务端已经启动。。。");
                datagramSocket.receive(datagramPacket);
                System.out.println("接收到客户端发送的信息是:"+new String(datagramPacket.getData()));
                
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return receiveStr;
        }
        public void response(){
            responseDatagramPacket=new DatagramPacket(b, b.length, datagramPacket.getAddress(), datagramPacket.getPort());
            try {
                System.out.println("我要给客户端返回数据了");
                datagramSocket.send(responseDatagramPacket);
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            
        }
        public void close(){
            datagramSocket.close();
                }
    
        public static void main(String[] args) {
            String host="192.168.0.196";
            int port=8826;
            ServerSocket serverSocket=new ServerSocket(host, port);
            while(true){
            serverSocket.receive();
            serverSocket.response();
            }
    
        }
    
    }

    这里我也不做太多解释了,但注意的是在socket在基于udp编程时,客户端和服务端并没有什么区别,只是一个访问方向的问题

  • 相关阅读:
    前端开发资料、实用小工具
    冒泡排序法,二分查找法
    数组练习
    一维数组练习题
    for循环输出菱形
    练习题
    课堂练习
    gO语言的安装和环境变量的配置
    PO BO VO DTO POJO DAO 概念及其作用
    BaseServlet
  • 原文地址:https://www.cnblogs.com/sunfb/p/2792082.html
Copyright © 2011-2022 走看看