TCP&UDP实例

//UDP数据发送
DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号,端口号只要不超过65535就行。
String str = "what are you 弄啥呢?";
DatagramSocket socket = new DatagramSocket();                //创建Socket相当于创建发送方码头
DatagramPacket packet =                         //创建Packet相当于发送方集装箱
new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);//1、Byte数组2、Byte数组长度3、要发送到的IP地址4、要发送到的端口号
socket.send(packet);                            //发货,将数据发出去
socket.close();                                //socket的底层是IO流,所以要关闭socket




//UDP数据接收
DatagramSocket socket = new DatagramSocket(6666);            //创建Socket相当于创建码头,端口号为6666
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);    //创建Packet相当于创建集装箱1、所能容纳的Byte数组2、Byte数组长度
socket.receive(packet);                            //接货,接收数据        
byte[] arr = packet.getData();                        //获取数据,用Byte数组存储
int len = packet.getLength();                        //获取有效的字节个数
System.out.println(new String(arr,0,len));                //转换为字符串输出
String ip = packet.getAddress().getHostAddress();            //获取ip地址
int port = packet.getPort();                        //获取端口号
socket.close();




注意:要先开启接收Socket,在开启发送Socket,否则可能会发生数据丢失




可以用多线程使数据在同一个界面传输,只需创建线程子类对象,重写run()方法
class receive extends Thread{
    public void run(){}
}
class send extends Thread{
    public void run(){}
}





//TCP传输的服务端
public class server {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(12345);    
        Socket socket = server.accept();                //接受客户端的请求
        InputStream is = socket.getInputStream();            //获取客户端输入流
        OutputStream os = socket.getOutputStream();            //获取客户端的输出流
        os.write("百度一下你就知道".getBytes());                //服务器向客户端写出数据    
        byte[] arr = new byte[1024];
        int len = is.read(arr);                        //读取客户端发过来的数据
        System.out.println(new String(arr,0,len));               //将数据转换成字符串并打印    
        socket.close();
    }
}




//TCP传输的客户端
public class client {
    public static void main(String[] args) throws IOException {        
        Socket socket = new Socket("127.0.0.1", 12345);        
        InputStream is = socket.getInputStream();            //获取客户端输入流
        OutputStream os = socket.getOutputStream();            //获取客户端的输出流        
        byte[] arr = new byte[1024];
        int len = is.read(arr);                        //读取服务器发过来的数据
        System.out.println(new String(arr,0,len));               //将数据转换成字符串并打印    
        os.write("学习挖掘机哪家强?".getBytes());            //客户端向服务器写数据    
        socket.close();
    }
}




//优化后的TCP传输的多线程服务端
public class server {
    public static void main(String[] args) throws IOException {
        ServerSocket server = new ServerSocket(12345);
        while(true) {
            final Socket socket = server.accept();                        //接受客户端的请求
            new Thread() {
                public void run() {
                    try {
                        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));        //将字节流包装成了字符流
                        PrintStream ps = new PrintStream(socket.getOutputStream());                    //PrintStream中有写出换行的方法                
                        ps.println("欢迎咨询黑马程序员");
                        System.out.println(br.readLine());
                        ps.println("不好意思,爆满了");
                        System.out.println(br.readLine());
                        socket.close();
                    } catch (IOException e) {                        
                        e.printStackTrace();
                    }
                }
            }.start();
        }
    }
}




//优化后的TCP传输的客户端
public class client {
    public static void main(String[] args) throws IOException {        
        Socket socket = new Socket("127.0.0.1", 12345);
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));        //将字节流包装成了字符流
        PrintStream ps = new PrintStream(socket.getOutputStream());                    //PrintStream中有写出换行的方法        
        System.out.println(br.readLine());                //遇到\r\n停止
        ps.println("我想报名黑马程序员");
        System.out.println(br.readLine());
        ps.println("大哭!!!能不能给次机会");    
        socket.close();
    }
}




把java文件生成为.jar文件
右键java文件-export-JARfile-next-设置存储路径-next-next-main class-finsh
发布了50 篇原创文章 · 获赞 7 · 访问量 4428

猜你喜欢

转载自blog.csdn.net/qq_37822034/article/details/82953331