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 

  • 相关阅读:
    ASP.Net User Controls as Static or Movable PopUps
    处理WinForm多线程程序时的陷阱(摘自网络)
    《颤抖吧,无证程序员们》只为娱乐
    Javascript和CSS浏览器兼容总结
    收藏的一个c#通讯编程的帖子很全
    WEB开发人员常用速查手册
    批量修改文件名称( 收藏的一个连接)
    SQL server常用操作
    开源网站大收藏
    pragma comment的使用
  • 原文地址:https://www.cnblogs.com/sinlearn/p/13445843.html
Copyright © 2011-2022 走看看