zoukankan      html  css  js  c++  java
  • JavaSE进阶--网络编程

    TCP通信

    TCP聊天器

    Server端

    package Socket.demo02;
    
    import java.io.*;
    import java.net.*;
    
    public class server {
        public static void main(String args[])  {
            System.out.println("----------server 启动---------------");
            ServerSocket serverSocket = null;
            Socket socket = null;
            InputStream is = null;
            ByteArrayOutputStream baos = null;
            try{
                serverSocket = new ServerSocket(9997);
                while(true){ socket = serverSocket.accept();
                is = socket.getInputStream();
                //管道流,解决中文输出,显示错误的问题
                baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len;
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                System.out.println("收到:"+baos.toString());
                }
            }catch (IOException e){
                    e.printStackTrace();
                }
            finally {
                    if(baos!=null){
                        try {
                            baos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if(is!=null){
                        try {
                            is.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (socket!=null){
                        try {
                            socket.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
        }
    }
    

    Client端

    package Socket.demo02;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class client {
        public static void main(String[] args){
            System.out.println("----------client 启动---------------");
            Socket socket = null;
            OutputStream os = null;
            try {
                InetAddress serverIP =InetAddress.getByName("127.0.0.1");
                int port = 9997;
                socket = new Socket(serverIP,port);
                os = socket.getOutputStream();
                os.write("你好,客户端正在发送消息".getBytes());// 发送消息
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(os!=null){
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(socket!=null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    }
    


    image.pngimage.png

    模拟文件上传

    package Socket.demo03;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class FileServer {
        public static void main(String[] args) throws IOException {
            System.out.println("---------file server------------");
            ServerSocket serverSocket = new ServerSocket(9000);
            Socket socket = serverSocket.accept();
            InputStream is = socket.getInputStream();
            FileOutputStream fos = new FileOutputStream(new File("girl2.png"));
            byte[] buffer = new byte[1024];
            int len;
            while((len=is.read(buffer))!=-1){
                fos.write(buffer,0,len);
            }
            //通知客户端
            OutputStream os = socket.getOutputStream();
            os.write("接收完毕,可以断开..".getBytes());
            fos.close();
            is.close();
            socket.close();
            serverSocket.close();
        }
    }
    
    
    package Socket.demo03;
    
    
    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class FileClient {
        public static void main(String[] args) throws IOException {
            System.out.println("---------file client------------");
            Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);    // 创建socket连接//ctr + alt +v
            OutputStream os = socket.getOutputStream();  // 创建一个输出流
            FileInputStream fis = new FileInputStream(new File("girl.png"));   //读取文件
            byte[] buffer = new byte[1024];    //写文件
            int len;
            while((len=fis.read(buffer))!=-1){
                os.write(buffer,0,len);
            }
            //通知服务器传输完毕
            socket.shutdownOutput();
            //确定服务器接收完毕,才能断开
            InputStream is = socket.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            int len2;
            while((len2=is.read(buf))!=-1){
                baos.write(buf,0,len2);
                System.out.println(baos.toString());
            }
    
            is.close();
            baos.close();
            fis.close();
            os.close();
            socket.close();
        }
    }
    
    

    image.png

    UDP通信

    UDP消息发送

    接收接收端

    package Socket.demo04;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    
    
    public class udpServer {
        public static void main(String[] args) throws Exception {
            DatagramSocket socket = new DatagramSocket(9090);
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
            socket.receive(packet);
            System.out.println(packet.getAddress().getHostAddress());
            System.out.println(new String(packet.getData(),0,packet.getLength()));
            socket.close();
        }
    }
    

    发送端

    package Socket.demo04;
    
    import java.net.*;
    
    public class udpClient {
        public static void main(String[] args) throws Exception {
            DatagramSocket socket = new DatagramSocket();
    
            String msg ="你好服务器";
            InetAddress ip = InetAddress.getByName("localhost");
            int port = 9090;
            DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, ip, port);
    
            socket.send(packet);
    
            socket.close();
        }
    }
    
    

    UDP聊天实现+多线程

    TalkSend 发数数据线程

    package Socket.demo06;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;
    import java.net.SocketException;
    
    public class TalkSend implements Runnable {
    
        private int fromPort;
        private String toIP;
        private int toPort;
        DatagramSocket socket = null;
        BufferedReader reader = null;
    
        public TalkSend(int fromPort, String toIP, int toPort) {
            this.fromPort = fromPort;
            this.toIP = toIP;
            this.toPort = toPort;
            try {
                socket = new DatagramSocket(fromPort);
                reader = new BufferedReader(new InputStreamReader(System.in));
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while(true){
                try{
                    String data = reader.readLine();
                    byte[] buffer  = data.getBytes();
                    DatagramPacket packet = new DatagramPacket(buffer,0, buffer.length,new InetSocketAddress(this.toIP,this.toPort));
                    socket.send(packet);
                    if(data.equals("bye")){
                        break;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    
    

    TalkRecieve 收数据线程

    package Socket.demo06;
    
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    public class TalkReceive implements Runnable {
    
        private int port;
        private String msgFrom;
        DatagramSocket socket = null;
    
        public TalkReceive(int port,String msgFrom) {
            this.port = port;
            this.msgFrom = msgFrom;
            try {
                socket = new DatagramSocket(port);
            } catch (SocketException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void run() {
            while(true){
                try{
                    byte[] container = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(container,0, container.length);
                    socket.receive(packet);
    
                    byte[] data = packet.getData();
                    String recievedata= new String(data,0,data.length);
                    System.out.println(msgFrom + ":" + recievedata);
                    if(recievedata.equals("bye")){
                        break;
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            socket.close();
        }
    }
    
    

    学生端

    package Socket.demo06;
    
    public class TalkStudent {
        public static void main(String[] args) {
            new Thread(new TalkSend(7777,"localhost",9999)).start();
            new Thread(new TalkReceive(8888,"老师")).start();
    
        }
    }
    
    

    老师端

    package Socket.demo06;
    
    public class TalkTeacher {
        public static void main(String[] args) {
            new Thread(new TalkSend(5555,"localhost",8888)).start();
            new Thread(new TalkReceive(9999,"学生")).start();
    
        }
    }
    
    


    image.png   image.png 

  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/sinlearn/p/13445843.html
Copyright © 2011-2022 走看看