java网络编程联系

TCP连接

  1. 发送文字
  • 客户端
package com.harbin.lesson02;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

public class TcpClientDemo01 {
    public static void main(String[] args) {
        OutputStream outputStream = null;
        Socket socket = null;
        while (true){
            try {
                InetAddress serverIp = InetAddress.getByName("127.0.0.1");
                int port = 9999;
                //创建一个连接
                socket = new Socket(serverIp,port);
                //发送消息IO流
                outputStream = socket.getOutputStream();
//            outputStream.write("hello,world".getBytes());
                Scanner scanner = new Scanner(System.in);
                if (scanner.hasNext()){
                    String s = scanner.nextLine();
                    outputStream.write(s.getBytes());
                }

            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if (outputStream != null){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                if (socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    }
}
  • 服务端
package com.harbin.lesson02;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo01 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream inputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;

        try {
            serverSocket = new ServerSocket(9999);
            while (true){
                //等待客户端连接
                socket = serverSocket.accept();
                //读取客户端消息
                inputStream = socket.getInputStream();

                //管道流--输出信息
                byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len;
                //inputStream.read(buffer) 将读到的数据放进buffer并返回读取的字节长度
                while ((len=inputStream.read(buffer))!=-1){
                    byteArrayOutputStream.write(buffer,0,len);
                }
                System.out.println(byteArrayOutputStream.toString());
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (byteArrayOutputStream!=null){
                try {
                    byteArrayOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
             if (inputStream!=null){
                 try {
                     inputStream.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }

             if (socket != null){
                 try {
                     socket.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
             if (serverSocket != null){
                 try {
                     serverSocket.close();
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
        }
    }
}
  1. 发送文件
  • 客户端
package com.harbin.lesson02;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClientDemo02 {
    public static void main(String[] args) {
        //1.创建连接
        Socket socket = null;
        OutputStream outputStream = null;
        FileInputStream fileInputStream = null;
        InputStream inputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
            InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
            int port = 9000;
            socket = new Socket(inetAddress,port);
            outputStream = socket.getOutputStream();

            fileInputStream = new FileInputStream("xuexiao.jpg");

            byte[] buffer = new byte[1024];
            int len;
            while ((len=fileInputStream.read(buffer))!=-1){
                outputStream.write(buffer,0,len);
            }

            //通知服务器传输完毕
            socket.shutdownOutput();//传输完毕

            //确定服务器接收完毕才能断开连接
            inputStream = socket.getInputStream();
            //String byte[]
            byteArrayOutputStream = new ByteArrayOutputStream();
            byte[] buff = new byte[1024];
            int lens;
            while ((lens=inputStream.read(buff))!=-1){
                byteArrayOutputStream.write(buff,0,lens);
            }
            System.out.println(byteArrayOutputStream.toString());


        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                byteArrayOutputStream.close();
                inputStream.close();
                fileInputStream.close();
                outputStream.close();
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }
}

  • 服务端
package com.harbin.lesson02;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServerDemo02 {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        InputStream inputStream = null;
        FileOutputStream fileOutputStream = null;
        Socket socket = null;

        try {
            //创建服务
            serverSocket = new ServerSocket(9000);
            //监听客户端连接--阻塞式监听,一直等待客户端连接
            socket = serverSocket.accept();
            //获取输入流
            inputStream = socket.getInputStream();

            //文件输出
            fileOutputStream = new FileOutputStream(new File("receive.jpg"));

            byte[] buffer = new byte[1024];
            int len;
            while ((len=inputStream.read(buffer))!=-1){
                fileOutputStream.write(buffer,0,len);
            }

            //通知客户端接收完毕
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("服务端接收完毕,可以断开".getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fileOutputStream.close();
                inputStream.close();
                socket.close();
                serverSocket.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

UDP连接

  1. 一次监听
  • 发送端
package com.harbin.lesson03;

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

public class UdpClientDemo01 {
    public static void main(String[] args) throws Exception{
        //建立socket
        DatagramSocket datagramSocket = new DatagramSocket();
        //建立数据包
        String msg = "hello,udpServer";
        InetAddress name = InetAddress.getByName("127.0.0.1");
        int port = 9090;
        DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, name, port);
        //发送数据包
        datagramSocket.send(datagramPacket);

        datagramSocket.close();
    }
}
  • 接收端
package com.harbin.lesson03;

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

public class UdpServerDemo01 {
    public static void main(String[] args) throws Exception {
        //开放端口
        DatagramSocket datagramSocket = new DatagramSocket(9090);

        //建立接受数据包
        byte[] buffer = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
        //接受数据包
        datagramSocket.receive(datagramPacket);

        System.out.println(datagramPacket.getAddress());
        System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength()));

        datagramSocket.close();
    }
}

  1. 持续监听
  • 发送端
package com.harbin.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class UdpSenderDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket datagramSocket = new DatagramSocket(8888);

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        while (true){
            String data = reader.readLine();
            byte[] dataBytes = data.getBytes();

            DatagramPacket datagramPacket = new DatagramPacket(dataBytes,0,dataBytes.length,new InetSocketAddress("localhost",6666));

            datagramSocket.send(datagramPacket);

            if (data.equals("bye")){
                break;
            }
        }


        datagramSocket.close();
    }
}

  • 接收端
package com.harbin.chat;

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

public class UdpReceiveDemo01 {
    public static void main(String[] args) throws Exception {
        DatagramSocket datagramSocket = new DatagramSocket(6666);

        while (true){
            byte[] container = new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(container, 0, container.length);
            datagramSocket.receive(datagramPacket);

            //断开连接
            byte[] data = datagramPacket.getData();
            String receiveData = new String(data, 0, data.length);
            System.out.println(receiveData);

            if (receiveData.equals("bye")){
                break;
            }
        }
        datagramSocket.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值