java二进制传输_Java Socket编程 - 基于TCP方式的二进制文件传输

packagecom.gloomyfish.socket.tutorial.filetransfer;importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.beans.PropertyChangeEvent;importjava.beans.PropertyChangeListener;importjava.io.File;importjava.net.InetSocketAddress;importjava.net.SocketAddress;importjavax.swing.BorderFactory;importjavax.swing.BoxLayout;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JProgressBar;importjavax.swing.JTextField;/*** 我一般写英文注释,偶尔我也会写中文注释,只是觉得写英文

* 注释跟代码比较统一,无他。

*

* @Date 2012-11-30

*@authorfish

**/

public class FileTransferClient extends JFrame implementsActionListener {/****/

private static final long serialVersionUID = 1L;public final static String SEND_CMD = "Send File";public final static int MINIMUM = 0;public final static int MAXIMUM = 100;//public final static String CONNECT_CMD = "Connect";

privateJButton sendFileBtn;privateJTextField serverField;privateJTextField portField;privateJProgressBar bar;publicFileTransferClient() {super("File Transfer Client");

initComponents();

}private voidinitComponents() {

getContentPane().setLayout(newBorderLayout());

JPanel progressPanel= newJPanel();

progressPanel.setLayout(newBoxLayout(progressPanel, BoxLayout.Y_AXIS));

bar= newJProgressBar();

progressPanel.add(bar);

bar.setMinimum(MINIMUM);

bar.setMaximum(MAXIMUM);

JPanel serverSettingPanel= newJPanel();

serverSettingPanel.setLayout(new GridLayout(2,2,5,5));

serverSettingPanel.setBorder(BorderFactory.createTitledBorder("Server Setting"));

serverField= newJTextField();

portField= newJTextField();

serverSettingPanel.add(new JLabel("Server IP/Host:"));

serverSettingPanel.add(serverField);

serverSettingPanel.add(new JLabel("Server Port:"));

serverSettingPanel.add(portField);

sendFileBtn= newJButton(SEND_CMD);

JPanel btnPanel= newJPanel();

btnPanel.setLayout(newFlowLayout(FlowLayout.RIGHT));

btnPanel.add(sendFileBtn);

getContentPane().add(serverSettingPanel, BorderLayout.NORTH);

getContentPane().add(btnPanel, BorderLayout.SOUTH);

getContentPane().add(progressPanel, BorderLayout.CENTER);

sendFileBtn.addActionListener(this);

}

@Overridepublic voidactionPerformed(ActionEvent e) {

String command=e.getActionCommand();if(command.equals(SEND_CMD)) {if(checkNull()) {

JOptionPane.showMessageDialog(this, "Please enter server host and port in order to set up the connection!");return;

}

JFileChooser chooser= newJFileChooser();int status = chooser.showOpenDialog(null);if (status ==JFileChooser.APPROVE_OPTION) {

File f=chooser.getSelectedFile();

SocketAddress address= newInetSocketAddress(getServer(), getPort());

FileTransferTask task= new FileTransferTask(f, address, this);

bar.setValue(0);

task.addPropertyChangeListener(newPropertyChangeListener() {public voidpropertyChange(PropertyChangeEvent evt) {if ("progress".equals(evt.getPropertyName())) {

bar.setValue((Integer) evt.getNewValue());

}

}

});

task.execute();//异步task执行

}

}else{//do nothing

}

}public voidshowSuccess() {

bar.setValue(100);

JOptionPane.showMessageDialog(this, "file send successfully!");

}publicString getServer() {returnserverField.getText().trim();

}public intgetPort() {returnInteger.parseInt(portField.getText().trim());

}/*** make sure the UI already have some correct input information here!!!

*@return

*/

private booleancheckNull() {

String serverName=serverField.getText();

String port=portField.getText();if(serverName == null || serverName.length() == 0 || port == null || port.length() == 0) {return true;

}try{

Integer.parseInt(port);//try to parse it as server port number , validation code.

} catch(NumberFormatException ne) {

ne.printStackTrace();return true;

}return false;

}public static voidmain(String[] args) {

FileTransferClient client= newFileTransferClient();

client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

client.setSize(400, 400);

client.setResizable(false);//client.pack();

client.setVisible(true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值