⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chat.java

📁 JAVA编的聊天和文件发送程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        
    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_jMenuItem1ActionPerformed
    {//GEN-HEADEREND:event_jMenuItem1ActionPerformed
        System.exit(0);
    }//GEN-LAST:event_jMenuItem1ActionPerformed
    
    class TCPWorker implements Runnable
    {
        public void run()
        {
            ServerSocket server=null;
            FileOutputStream fos=null;
            try
            {
                
                server=new ServerSocket(8888);
                while(true)
                {
                    Socket socket=server.accept();
                    InputStream is=socket.getInputStream(); //读取流
                    ObjectInputStream ois=new ObjectInputStream(is);//对象读取流
                    String ip=socket.getInetAddress().getHostAddress(); //对方机器IP
                    
                    //获取对方的请求信息
                    Object obj=ois.readObject();
                    FileInfo info=(FileInfo)obj;
                    String msg="是否接受来自 "+ip+" 的文件:["+info.getFileName()+"]?";
                    int answer=JOptionPane.showConfirmDialog(ref,msg,"文件接受",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
                    String input=null;
                    if(answer==JOptionPane.NO_OPTION)
                    {
                        input="no";
                    }
                    else
                    {
                        input="yes";
                    }
                    OutputStream os=socket.getOutputStream();
                    os.write(input.getBytes()); //向对方答复
                    
                    //如果是同意接受的
                    if(answer==JOptionPane.YES_OPTION)
                    {
                        JFileChooser jfc=new JFileChooser();
                        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                        if(jfc.showSaveDialog(ref)==JFileChooser.APPROVE_OPTION)
                        {
                            File dir=jfc.getSelectedFile();//获取选择的保存目录
                            File f=new File(dir,info.getFileName());
                            txtFilePath.setText(f.getAbsolutePath());
                            fos=new FileOutputStream(f);
                            BufferedOutputStream bos=new BufferedOutputStream(fos,1024*100);
                            byte[] data=new byte[1024*20];
                            int count=is.read(data);
                            while(count!=-1)
                            {
                                bos.write(data,0,count);
                                count=is.read(data);
                            }
                            bos.flush();
                            JOptionPane.showMessageDialog(ref,"文件接受完毕","提示",JOptionPane.INFORMATION_MESSAGE);
                        }
                    }
                    
                }
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
            finally
            {
                
            }
        }
    }
    
    
    
    private void execOpenFile(java.awt.event.ActionEvent evt)//GEN-FIRST:event_execOpenFile
    {//GEN-HEADEREND:event_execOpenFile
        
        JFileChooser jfc=new JFileChooser();
        if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION)
        {
            java.io.File file=jfc.getSelectedFile();
            String filePath=file.getAbsolutePath();
            
            this.txtFilePath.setText(filePath);
        }
    }//GEN-LAST:event_execOpenFile
    
    private void sendfile(java.awt.event.ActionEvent evt)//GEN-FIRST:event_sendfile
    {//GEN-HEADEREND:event_sendfile
        
        String filePath=this.txtFilePath.getText();
        String ip=this.txtIP.getText();
        String strPort=this.txtPort.getText();
        int port=Integer.parseInt(strPort);
        
        File file=new File(filePath);
        SendWork sfw=new SendWork(file,ip,port);
        Thread t=new Thread(sfw);
        t.start();
    }//GEN-LAST:event_sendfile
    
    private void txtIPKeyPressed(java.awt.event.KeyEvent evt)//GEN-FIRST:event_txtIPKeyPressed
    {//GEN-HEADEREND:event_txtIPKeyPressed
        if(evt.getKeyCode()==KeyEvent.VK_ALT)
        {
            evt.setKeyCode(0);
            this.btnSend.doClick();
        }
    }//GEN-LAST:event_txtIPKeyPressed
    
    private void txtMessageKeyPressed(java.awt.event.KeyEvent evt)//GEN-FIRST:event_txtMessageKeyPressed
    {//GEN-HEADEREND:event_txtMessageKeyPressed
        if(evt.getKeyCode()==KeyEvent.VK_ALT)
        {
            evt.setKeyCode(0);
            this.btnSend.doClick();
        }
    }//GEN-LAST:event_txtMessageKeyPressed
    
    private void execSend(java.awt.event.ActionEvent evt)//GEN-FIRST:event_execSend
    {//GEN-HEADEREND:event_execSend
        String msg=this.txtMessage.getText().trim();
        String ip=this.txtIP.getText().trim();
        if(msg.length()==0 || ip.length()==0)
        {
            JOptionPane.showMessageDialog(this,"信息填写不完整");
            return;
        }
        byte[] data=msg.getBytes();
        
        try
        {
            {
                InetAddress address=InetAddress.getByName(ip);
                DatagramPacket packet=new DatagramPacket(data,0,data.length,address,8888);
                
                java.util.Date dt=new java.util.Date();
                java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                String strDate=sdf.format(dt);    //时间
                
                txtDetails.append("["+strDate+"]     ");
                
                this.socket.send(packet);
                this.txtDetails.append("我说:");
                this.txtDetails.append("\n");
                this.txtDetails.append(msg);
                this.txtDetails.append("\n");
                
            }
            this.txtMessage.setText(" ");    //清空 txtMessage里面的内容
        }
        catch (IOException ex)
        {
            JOptionPane.showMessageDialog(this,"发送失败!","提示",JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_execSend
    
    private void execWindowsClosed(java.awt.event.WindowEvent evt)
    {
        System.exit(0);
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String args[])
    {
        java.awt.EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                new Chat().setVisible(true);
            }
        });
    }
    
    
    // 变量声明 - 不进行修改//GEN-BEGIN:variables
    private javax.swing.JButton btnOpenFile;
    private javax.swing.JButton btnSend;
    private javax.swing.JButton fileSend;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuBar jMenuBar2;
    private javax.swing.JMenuBar jMenuBar3;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JMenu menu;
    private javax.swing.JTextArea txtDetails;
    private javax.swing.JTextField txtFilePath;
    private javax.swing.JTextField txtIP;
    private javax.swing.JTextArea txtMessage;
    private javax.swing.JTextField txtPort;
    // 变量声明结束//GEN-END:variables
    class UDPWorker implements Runnable
    {
        public void run()
        {
            try
            {
                socket=new DatagramSocket(8888);  //注册本地的8888端口
                byte[] b=new byte[1024*100];
                DatagramPacket packet=new DatagramPacket(b,0,b.length); //数据包,  用于接受
                while(true)
                {
                    socket.receive(packet);
                    String ip=packet.getAddress().getHostAddress(); //数据包的IP
                    byte[] data=packet.getData();// 获取数据包的内容,基于字节的
                    String msg=new String(data,0,packet.getLength());
                    
//                    StringBuilder sb=new StringBuilder(msg);
//                    String newMsg=sb.reverse().toString();        //文本逆转换
                    
                    java.util.Date dt=new java.util.Date();
                    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    String strDate=sdf.format(dt);                   //时间
                    
                    txtDetails.append("["+strDate+"]     ");
                    txtDetails.append(ip+"说");
                    txtDetails.append("\n");
                    txtDetails.append(msg);
                    txtDetails.append("\n");
                }
            }
            catch(IOException ex)
            {
                ex.printStackTrace();
            }
        }
        
        
    }
    
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -