socket二进制传输 java_Java Socket编程 基于TCP方式的二进制文件传输

基于TCP方式的二进制文件传输

一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成。

除了基于TCP的二进制文件传输,还演示了JAVA Swing的一些编程技巧,Demo程序

实现主要功能有以下几点:

1. 基于Java Socket的二进制文件传输(包括图片,二进制文件,各种文档work,

PDF)

2. SwingWorker集合JProgressBar显示实时传输/接受完成的百分比

3. 其它一些Swing多线程编程技巧

首先来看一下整个Dome的Class之间的关系图:

下面按照上图来详细解释各个类的功能与代码实现:

服务器端:

FileTransferServer类的功能首先是在端口9999创建一个服务器套接字并

开始监听连接。相关代码如下:

[java] view plaincopy

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类的完整源代码如下:

[java] view plaincopy

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 http://www.wendangwang.com.ServerSocket;

import http://www.wendangwang.com.Socket;

import javax.swing.BoxLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

im

port javax.swing.JPanel;

import javax.swing.JProgressBar;

public class FileTransferServer extends JFrame implements ActionListener {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值