java p2p 下载_java p2p文件传输(含服务器端与jsp源码)

【实例简介】

【实例截图】

912fb41110d899888342b9c1eb9a57e1.png

a0be699de9e26b85db3051a58d1c4ebd.png

0e63aa9b31994a72f29785b67a745f69.png

f27fbc1ff3a458c57057258c875c45d2.png

【核心代码】

import java.net.*;

import java.util.List;

import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.net.InetAddress;

import java.awt.event.WindowEvent;

import java.awt.event.WindowAdapter;

import java.io.*;

public class p2p {

boolean packFrame = false;

/**

* Construct and show the application.

*/

public p2p() {

MainFrame frame = new MainFrame();

// Validate frames that have preset sizes

// Pack frames that have useful preferred size info, e.g. from their layout

if (packFrame) {

frame.pack();

} else {

frame.validate();

}

// Center the window

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = frame.getSize();

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

frame.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

frame.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

try {

UIManager.setLookAndFeel(UIManager.

getSystemLookAndFeelClassName());

} catch (Exception exception) {

exception.printStackTrace();

}

new p2p();

}

});

}

}

class MainFrame extends JFrame {

JPanel contentPane;

JButton jbtnSend = new JButton();

JButton jliaotian = new JButton();

JLabel jlblIP = new JLabel();

JLabel jlblIP1 = new JLabel();

JLabel jlblIP2 = new JLabel();

JButton jbtnSetting = new JButton();

JTabbedPane jtpTransFile = new JTabbedPane();

JTextArea help = new JTextArea(5, 20);

TransFileManager tfm=new TransFileManager(jtpTransFile);

public MainFrame() {

try {

setDefaultCloseOperation(EXIT_ON_CLOSE);

jbInit();

} catch (Exception exception) {

exception.printStackTrace();

}

}

private void jbInit() throws Exception {

contentPane = (JPanel) getContentPane();

contentPane.setLayout(null);

this.getContentPane().setBackground(new Color(206, 227, 249));

setSize(new Dimension(400, 300));

this.setResizable(false);

setTitle("P2P文件传输");

this.addWindowListener(new MainFrame_this_windowAdapter(this));

help.append("*基于局域网操作提示:\n");

help.append("1.直接在“对方IP”中填写对方软件右上角的“局域网IP”。\n");

help.append("2.在“对方端口号”中填写对方端口。\n");

help.append(" (注:端口号可在“设置”中修改)\n");

help.append("*基于Internet操作提示\n");

help.append("1.在“对方IP”中填写对方在Internet中的IP。\n");

help.append(" (注:此IP可以通过电脑上网查询,如:登陆www.ip138.com)\n");

help.append("2.在“对方端口号”中填写对方端口。\n");

help.append(" (注:端口号可在“设置”中修改)\n");

jbtnSend.setBackground(new Color(236, 247, 255));

jbtnSend.setBounds(new Rectangle(14, 4, 85, 25));

jbtnSend.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jbtnSend.setBorder(BorderFactory.createRaisedBevelBorder());

jbtnSend.setText("发送文件");

jbtnSend.addActionListener(new MainFrame_jbtnSend_actionAdapter(this));

jbtnSetting.setBackground(new Color(236, 247, 255));

jbtnSetting.setBounds(new Rectangle(106,18,73, 25));

jbtnSetting.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jbtnSetting.setBorder(BorderFactory.createRaisedBevelBorder());

jbtnSetting.setText("设置");

jliaotian.setBackground(new Color(236, 247, 255));

jliaotian.setBounds(new Rectangle(14, 29, 85, 25));

jliaotian.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jliaotian.setBorder(BorderFactory.createRaisedBevelBorder());

jliaotian.setText("与TA聊天");

jliaotian.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {new ChatFrame();}});

jbtnSetting.addActionListener(new MainFrame_jbtnSetting_actionAdapter(this));

jtpTransFile.setBackground(new Color(206, 227, 249));

jtpTransFile.setBounds(new Rectangle( 0, 54, 402, 246));

jlblIP.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jlblIP.setBounds(new Rectangle(197, 5, 180, 16));

jlblIP1.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jlblIP1.setBounds(new Rectangle(197, 21, 250, 16));

jlblIP1.setText("在Internet上的IP请上网查询");

jlblIP2.setFont(new java.awt.Font("宋体", Font.PLAIN, 13));

jlblIP2.setBounds(new Rectangle(197, 36, 250, 16));

jlblIP2.setText("(如:www.ip138.com)");

contentPane.setBackground(new Color(206, 227, 249));

jtpTransFile.add(help,"帮助");

contentPane.setToolTipText("");

contentPane.add(jtpTransFile);

contentPane.add(jbtnSend);

contentPane.add(jbtnSetting);

contentPane.add(jliaotian);

contentPane.add(jlblIP);

contentPane.add(jlblIP1);

contentPane.add(jlblIP2);

byte [] ip=InetAddress.getLocalHost().getAddress();

jlblIP.setText("局域网IP:" (ip[0]&0xff) "." (ip[1]&0xff) "." (ip[2]&0xff) "." (ip[3]&0xff));

tfm.start();

}

public void jbtnSetting_actionPerformed(ActionEvent e) {

SettingDialog sd=new SettingDialog(this);

sd.jtfPort.setText(String.valueOf(tfm.port));

sd.jspnThreadNum.setValue(new Integer(tfm.maxThreadNum));

sd.show();

if(sd.flag){

if(tfm.port!=sd.port){

tfm.setPort(sd.port);

}

tfm.setMaxThreadNum(sd.threadNum);

}

}

public void jbtnSend_actionPerformed(ActionEvent e) {

TransFileDialog tfd=new TransFileDialog(this);

tfd.show();

if(tfd.flag){

for(int i=0;i

tfm.sendFile(tfd.serverName,tfd.port,tfd.files[i].getAbsolutePath(),tfd.message);

}

}

}

public void this_windowClosed(WindowEvent e) {

tfm.close();

}

}

class MainFrame_this_windowAdapter extends WindowAdapter {

private MainFrame adaptee;

MainFrame_this_windowAdapter(MainFrame adaptee) {

this.adaptee = adaptee;

}

public void windowClosed(WindowEvent e) {

adaptee.this_windowClosed(e);

}

}

class MainFrame_jbtnSend_actionAdapter implements ActionListener {

private MainFrame adaptee;

MainFrame_jbtnSend_actionAdapter(MainFrame adaptee) {

this.adaptee = adaptee;

}

public void actionPerformed(ActionEvent e) {

adaptee.jbtnSend_actionPerformed(e);

}

}

class MainFrame_jbtnSetting_actionAdapter implements ActionListener {

private MainFrame adaptee;

MainFrame_jbtnSetting_actionAdapter(MainFrame adaptee) {

this.adaptee = adaptee;

}

public void actionPerformed(ActionEvent e) {

adaptee.jbtnSetting_actionPerformed(e);

}

}

class Server extends Thread {

public Server() {

try {

jbInit();

} catch (Exception ex) {

ex.printStackTrace();

}

}

public int port=5000;

public int maxThreadNum=5;

private ServerSocket checkServer = null;

private SocketThread socketThread = null;

private Socket aSocket = null;

private List socketPool; //socket连接池

private boolean serverRunning = false; //服务器是否运行

//构造函数

public Server(List socketPool) {

this.socketPool = socketPool;

}

public void run() {

serverRunning = true;

try {

checkServer = new ServerSocket(port);

checkServer.setSoTimeout(60000);

} catch (IOException ex) {

ex.printStackTrace();

}

while (serverRunning) {

try {

System.out.println("Started...");

aSocket = checkServer.accept();

System.out.println("client connected");

socketThread = new SocketThread(aSocket);

socketThread.start();

if(socketPool.size()>=maxThreadNum){

socketThread.stopThread();

}

else{

socketPool.add(socketThread);

}

}

catch (Exception ex) {

ex.printStackTrace();

}

try {

Thread.sleep(1000);

} catch (InterruptedException ex) {

ex.printStackTrace();

}

}

try {

checkServer.close();

} catch (IOException ex1) {

}

}

public void stopThread(){

serverRunning=false;

}

private void jbInit() throws Exception {

}

}

class SettingDialog extends JDialog {

boolean flag=false;

int threadNum;

int port;

JLabel jlblThreadNum = new JLabel();

JSpinner jspnThreadNum = new JSpinner(new SpinnerNumberModel(5,1,10,1));

JLabel jlblPort = new JLabel();

JTextField

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值