socket (UDP通信)

UDP通信:
客户端数据发出去,不用管它是否收到。
(多用于游戏等)

Server1:

package day20150915UDPsocket;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class Server {
    public void start(){
        try{
            /*
             * 接收包的步骤
             * 1:创建socket(1次)
             * 2:创建一个合适大小的包
             * 3:通过socket接收数据到包中
             * 4:拆包区数据
             */
            DatagramSocket socket = new DatagramSocket(8088);
            byte[] data = new byte[100];
            DatagramPacket recvPacket = new DatagramPacket(data,data.length);
            /*
             * 接收数据到包中
             * 注意:该方法是个阻塞方法,先卡住,就收到数据后才结束
             */
            socket.receive(recvPacket);
            //拆包拿数据
            byte[] d = recvPacket.getData();//就是上面的data数组
            //有效数据的长度
            int dlen = recvPacket.getLength();
            /*
             * String(byte[],int offset, int len, String charsetName)
             * 从给定的字节数组中,从offset开始连续len个字节,
             * 再根据字符集转为字符串
             */
            String info = new String(d,0,dlen,"utf-8");
            System.out.println("客户端说:"+info);

        }catch(Exception e){

        }
    }
    public static void main(String[] args) {
        Server server = new Server();
        server.start();
    }

}

Client1:

package day20150915UDPsocket;

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

public class Client {
    public void start(){
        try{
            /*
             * 想服务器发送数据的步骤:
             * 1:创建好socket
             * 2:准备数据
             * 3:创建数据包
             * 4:将数据存入包中(3,4是一步完成的)
             * 5:将数据包通过socket发送给服务器
             */
            DatagramSocket socket = new DatagramSocket();
            String str = "你好服务器";
            byte[] data = str.getBytes("utf-8");
            //打包,准备包裹,填写地址,装入数据
            InetAddress address = InetAddress.getByName("localhost");
            int port = 8088;

            DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
            //将包发出去
            socket.send(sendPacket);
        }catch(Exception e){

        }
    }
    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }
}

Server2收数据的同时发送数据

package day20150915UDPsocket;

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

public class Server {
    public void start(){
        try{
            /*
             * 接收包的步骤
             * 1:创建socket(1次)
             * 2:创建一个合适大小的包
             * 3:通过socket接收数据到包中
             * 4:拆包区数据
             */
            DatagramSocket socket = new DatagramSocket(8088);
            byte[] data = new byte[100];
            DatagramPacket recvPacket = new DatagramPacket(data,data.length);
            /*
             * 接收数据到包中
             * 注意:该方法是个阻塞方法,先卡住,就收到数据后才结束
             */
            socket.receive(recvPacket);
            //拆包拿数据
            byte[] d = recvPacket.getData();//就是上面的data数组
            //有效数据的长度
            int dlen = recvPacket.getLength();
            /*
             * String(byte[],int offset, int len, String charsetName)
             * 从给定的字节数组中,从offset开始连续len个字节,
             * 再根据字符集转为字符串
             */
            String info = new String(d,0,dlen,"utf-8");
            System.out.println("客户端说:"+info);

            //回复客户端
            String str = "你好,客户端!";
            data = str.getBytes("utf-8");
            //打包,准备包裹,填写地址,装入数据
            InetAddress address = recvPacket.getAddress();
            int port = recvPacket.getPort();
            //创建发送包
            DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
            //将包发送出去
            socket.send(sendPacket);


        }catch(Exception e){

        }
    }
    public static void main(String[] args) {
        Server server = new Server();
        server.start();
    }

}

Client2:发送数据然后接收数据

package day20150915UDPsocket;

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

public class Client {
    public void start(){
        try{
            /*
             * 想服务器发送数据的步骤:
             * 1:创建好socket
             * 2:准备数据
             * 3:创建数据包
             * 4:将数据存入包中(3,4是一步完成的)
             * 5:将数据包通过socket发送给服务器
             */
            DatagramSocket socket = new DatagramSocket();
            String str = "你好服务器";
            byte[] data = str.getBytes("utf-8");
            //打包,准备包裹,填写地址,装入数据
            InetAddress address = InetAddress.getByName("localhost");
            int port = 8088;

            DatagramPacket sendPacket = new DatagramPacket(data,data.length,address,port);
            //将包发出去
            socket.send(sendPacket);

            /*
             * 接收服务端发送回来的信息
             */
            data = new byte[100];
            DatagramPacket recvPacket = new DatagramPacket(data,data.length);
            //接收数据到包中
            //注意,该方法是个阻塞方法
            socket.receive(recvPacket);

            //拆包拿数据
            byte[] d = recvPacket.getData();
            //有效数据长度
            int dlen = recvPacket.getLength();
            /*
             * String(byte[],int offset, int len, String charsetName)
             * 从给定的字节数组中,从offset开始连续len个字节,
             * 再根据字符集转为字符串
             */
            String info = new String(d,0,dlen,"utf-8");
            System.out.println("服务端说:"+info);
        }catch(Exception e){

        }
    }
    public static void main(String[] args) {
        Client client = new Client();
        client.start();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值