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编程时,客户端和服务端并没有什么区别,只是一个访问方向的问题

  • 相关阅读:
    cocos2d-x lua 学习笔记(1) -- 环境搭建
    Cocos2d-x 3.x 如何编译成安卓程序
    Cocos2d-x 3.4 初体验——安装教程
    cocos2d-x 之 CCProgressTimer
    android sdk离线安装
    在cocos2d-x-3.0 android 平台编译时提示CocosGUI.h: No such file or directory
    cocos2d_x iconv转码
    cocos2d-x发生undefined reference to `XX'异常 一劳永逸解决办法
    libjpeg.a exists or that its path is correct
    UE4插件
  • 原文地址:https://www.cnblogs.com/sunfb/p/2792082.html
Copyright © 2011-2022 走看看