java网络通信TCP与UDP

TCP

tcp一般用的是c~s模式,即客户端服务器模式。
服务器是被动的,要先等待客户端去链接它,它才会有所回应。
代码如下:
1)Client端:

System.out.println("客户端启动");
        Socket socket = new Socket("192.168.0.33",8080);
// OutputStream os = socket.getOutputStream();//会的输出流
// OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter  bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));



// InputStream is = socket.getInputStream();//获得输入流
// InputStreamReader isr = new InputStreamReader(is);
        BufferedReader  br = new BufferedReader(new InputStreamReader(socket.getInputStream()));    
        Scanner scanner = new Scanner(System.in);
        while(true){
        String s = scanner.next();  
        bw.write(s+"\n");
        bw.flush();
        String back = br.readLine();
        System.out.println("服务器返回"+back);
        }

2)服务器端代码:

ServerSocket server = new ServerSocket(8080);//建立服务器的套接字
            System.out.println("服务器启动");
            Socket socket = server.accept();//等待接入,当接入时再建立一个新的套接字。
// InputStream is = socket.getInputStream();//获得输入流
// InputStreamReader isr = new InputStreamReader(is);
            BufferedReader  br = new BufferedReader(new InputStreamReader(socket.getInputStream()));    

// OutputStream os = socket.getOutputStream();//获得输出流
// OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter  bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

            Scanner scanner = new Scanner(System.in);

            while(true){
            String s = br.readLine();//进行读入
            System.out.println("客户端返回"+s);
            String back = scanner.next();
            bw.write(back+"\n");
            bw.flush();
            }

UDP

udp不保证通讯的质量,是以包的形式进行发射的。
代码如下:

public static void main(String[] args) {
        try {
            //建立接受套接字
            DatagramSocket receiver = new DatagramSocket(8080);
            DatagramSocket send = new DatagramSocket();//创建发送套接字



            while(true){
                byte [] array = new byte[1024];//建立接受数据的数组 
                DatagramPacket packet = new DatagramPacket(array, array.length);
                receiver.receive(packet);
                byte [] data = packet.getData();
                System.out.println("接收者 得到的数据 : "+new String(data,0,packet.getLength()));
                Scanner scanner= new Scanner(System.in);            
                String s =scanner.next();               
                byte [] arraysend=s.getBytes();
                DatagramPacket packetsend = new DatagramPacket(arraysend, arraysend.length,InetAddress.getByName("192.168.0.33"),8081);
                send.send(packetsend );
            }
// receiver.close();

        } catch (SocketException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
public static void main(String[] args) {
        try {
            DatagramSocket send = new DatagramSocket();//创建发送套接字

            DatagramSocket receiver = new DatagramSocket(8081);//创建接收套接字


            while(true){
                Scanner scanner= new Scanner(System.in);            
                String s =scanner.next();
                byte [] array = s.getBytes();//发送内容
                //创建发送包,指定发送的内容,长度,地址,端口号
                DatagramPacket packet = new DatagramPacket(array, array.length,InetAddress.getByName("192.168.0.33"),8080);             
                send.send(packet);//将数据包发送出去。 
                byte [] arrayreceiver =new byte[1024];//接收数组
                //创建接收数据包
                DatagramPacket packetc = new DatagramPacket(arrayreceiver, arrayreceiver.length);
                receiver.receive(packetc);
                byte [] data = packetc.getData();
                System.out.println("发送者得到的数据 :"+new String(data,0,packetc.getLength()));
            }

        } catch (SocketException e) {

            e.printStackTrace();
        } catch (UnknownHostException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }

你可能感兴趣的:(学习)