没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java基于基于TCP方式的二进制文件传输方式的二进制文件传输
主要为大家介绍了Java基于TCP方式的二进制文件传输,一个基于Java Socket协议之上文件传输的完整示例,基于TCP通
信完成,感兴趣的小伙伴们可以参考一下
一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成。
除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序
实现主要功能有以下几点:
1.基于基于Java Socket的二进制文件传输的二进制文件传输(包括图片,二进制文件,各种文档包括图片,二进制文件,各种文档work,,PDF)
2.SwingWorker集合集合JProgressBar显示实时传输显示实时传输/接受完成的百分比接受完成的百分比
3.其它一些其它一些Swing多线程编程技巧多线程编程技巧
首先来看一下整个Dome的Class之间的关系图:
下面按照上图来详细解释各个类的功能与代码实现:
服务器端:
FileTransferServer类的功能首先是在端口9999创建一个服务器套接字并
开始监听连接。相关代码如下:
private void startServer(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server started at port :" + port);
while(true) {
Socket client = serverSocket.accept(); // blocked & waiting for income socket
System.out.println("Just connected to " + client.getRemoteSocketAddress());
FileReceiveTask task = new FileReceiveTask(client);
bar.setValue(0); // reset it now
task.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
bar.setValue((Integer) evt.getNewValue());
}
}
});
task.execute();
}
} catch (IOException e) {
e.printStackTrace();
}
}
关于PropertyChangeListener, Java提供了一个非常有力的工具类来
监控任意Bean Model的数据改变,程序通过添加该监听器实现对
SwingWorker的progress属性值改变的事件捕获,然后更新JProgressBar
实例对象,实现了UI的刷新。FileTransferServer类的完整源代码如下:
package com.gloomyfish.socket.tutorial.filetransfer;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class FileTransferServer extends JFrame implements ActionListener {
/**
*
*/
public final static String START_SVR = "Start";
public final static String SHUT_DOWN_SVR = "Shut Down";
public final static String END_FLAG = "EOF";
private static final long serialVersionUID = 1L;
private ServerSocket serverSocket;
private JButton startBtn;
private JProgressBar bar;
public FileTransferServer() {
super("File Server");
initComponent();
setupListener();
}
private void setupListener() {
startBtn.addActionListener(this);
}
private void initComponent() {
startBtn = new JButton(START_SVR);
JPanel progressPanel = new JPanel();
progressPanel.setLayout(new BoxLayout(progressPanel, BoxLayout.Y_AXIS));
bar = new JProgressBar();
bar.setMinimum(0);
bar.setMaximum(100);
progressPanel.add(bar);
getContentPane().setLayout(new BorderLayout());
JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
btnPanel.add(startBtn);
getContentPane().add(btnPanel, BorderLayout.SOUTH);
getContentPane().add(progressPanel, BorderLayout.CENTER);
}
private void startServer(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server started at port :" + port);
while(true) {
Socket client = serverSocket.accept(); // blocked & waiting for income socket
System.out.println("Just connected to " + client.getRemoteSocketAddress());
FileReceiveTask task = new FileReceiveTask(client);
bar.setValue(0); // reset it now
task.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
if ("progress".equals(evt.getPropertyName())) {
bar.setValue((Integer) evt.getNewValue());
}
}
});
task.execute();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void showSuccess() {
bar.setValue(100);
JOptionPane.showMessageDialog(this, "file received successfully!");
}
@Override
public void actionPerformed(ActionEvent e) {
if(START_SVR.equals(e.getActionCommand())) {
Thread startThread = new Thread(new Runnable() {
public void run() {
startServer(9999);
}
剩余6页未读,继续阅读
资源评论
weixin_38748875
- 粉丝: 10
- 资源: 951
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功