📄 chat.java
字号:
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 + -