用TCP传输文件

sky123123 2009-03-30 03:22:18
我用TCP编了个聊天软件,想加入文件传输功能,就是在点击传输文件按钮时,对方能够弹出一个对话框是否同意接受。这个功能怎么样实现呢?小弟一时还想不起来啊,不知那个高手肯给予指点迷津啊?感谢了!!!
...全文
316 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky123123 2009-04-03
  • 打赏
  • 举报
回复
在大家的热情帮助下,我文件传输成功了。谢谢大家!!!!

我用的是C/S S/C模型,有一个客户端发送消息,经由服务器转发至每个客户端,所以,我在客户端发送信息的时候,加上本客户端的端口好,再由服务器转发,发至客户端时在将端口号分离出来,然后和自己的端口好比较,如果和自己的端口号相等就不做任何处理,不相等的话,就证明是传输文件的信号,就启动接受文件线程。接着建立,文件传输TCP连接。接着就可以传输文件啦!


最后还要感谢大家的热忱相助。
衷心的表示感谢!!!
sky123123 2009-04-02
  • 打赏
  • 举报
回复

牛仔都很忙啊..
将sendSignle(fs.trueFileName); 方法包装在一个"发送"按钮事件监听器类,在事件发生事调用我上面那段代码,不行么?
[/Quote]

我也做到这步了,

fs.sendSignle(fs.trueFileName); //发送一个信号

fs.startServerThread(); //用线程启动传送文件


这个sendSingle();信号怎么样才能让通过服务器的另外一个客户端受到并响应呢?


就差这一步啦!!!

请多多帮忙啊!!!!

万分感谢!!!!!!!!!!!
chaner2002 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sky123123 的回复:]
能不能给出具体的代码啊?????
[/Quote]
牛仔都很忙啊..
将sendSignle(fs.trueFileName); 方法包装在一个"发送"按钮事件监听器类,在事件发生事调用我上面那段代码,不行么?
sky123123 2009-04-01
  • 打赏
  • 举报
回复
没有人愿意回答吗?还是问题太简单了???希望大家多多帮忙啊,俺等了很久啊,现在急用!!!!!!!
sky123123 2009-04-01
  • 打赏
  • 举报
回复
能不能给出具体的代码啊?????
w2010kaoyan 2009-04-01
  • 打赏
  • 举报
回复
学习中!
diggywang 2009-04-01
  • 打赏
  • 举报
回复
我觉得我已经说的很详细了,java中socket默认都是以tcp方式建立连接的,所以你不用管tcp或udp之类的底层协议,只要建立socket连接,就可以read来write去啦!
chaner2002 2009-03-31
  • 打赏
  • 举报
回复
你加入一个按钮,这个按钮注册一个弹出JFileChooser,具体可以这样:
if(e.getActionCommand().equals("上传")){ //e是 Actionevent,"上传"是按钮的标签

JFileChooser fileChooser = new JFileChooser();
int i = fileChooser.showOpenDialog(this.sf);
//sf.jd.setVisible(false);

if(i==JFileChooser.APPROVE_OPTION){

File selectedFile = fileChooser.getSelectedFile();
JTextField tf = new JTextField();
tf.setText(selectedFile.getName());
sf.tf.setText(selectedFile.getAbsolutePath()); //获得文件路径,sf是聊天窗口,是个主类,sf.tf是sf中的一个JTextFiled,你从这儿得到的路径可以在sf.tf中显示,然后"发送"按钮就可以将文件名读进去,再传输到另一方.

}
}
如果没看明白,可以继续问我.
sky123123 2009-03-31
  • 打赏
  • 举报
回复
五楼的大哥说的太对了,我就是按着这个思路进行的,现在最重要的是sendSingle()方法该如何实现,我用的是TCP。多谢了,俺在线等啊!!!!!!!!!
diggywang 2009-03-31
  • 打赏
  • 举报
回复
每个客户机都开一个serversocket,一旦一个客户机触发sendSignle事件,就请求另一个客户机的serversocket并建立连接线程(注意,一定要线程,否则没办法传多个文件),连接建立后由发送方将文件名传送给接受方,接受方收到请求后再显示相应的文件接收对话框,一旦允许接收并选择了存放的位置(发送同意接收信号给发送方),发送方此时开始从socket的outputstream中写入文件,而接受方从socket的inputstream中读取相关数据并写入文件。
sky123123 2009-03-31
  • 打赏
  • 举报
回复
嗯,这点我看明白了,多谢了。我的发送按钮是这样实现的:你请看

private JButton getSendFileButton() {
if (sendFileButton == null) {
sendFileButton = new JButton();
sendFileButton.setUI(new BasicButtonUI());
sendFileButton.setToolTipText("传送文件");
sendFileButton.setIcon(new ImageIcon(getClass().getResource("/sendFile.png")));
sendFileButton.setBackground(new Color(212, 231, 245));
sendFileButton.setBounds(new Rectangle(237, 261, 38, 25));
sendFileButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
if(fs.changefile() == null)
{
//什么也不做
}
else
{


sendSignle(fs.trueFileName); //发送一个信号 fs.startServerThread(); //用线程启动传送文件
}

}
});
sendFileButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseExited(java.awt.event.MouseEvent e) {
sendFileButton.setBackground(new Color(212, 231, 245));
}
public void mouseEntered(java.awt.event.MouseEvent e) {
sendFileButton.setBackground(new Color(0, 150, 200));
}
public void mousePressed(java.awt.event.MouseEvent e) {
sendFileButton.setBackground(new Color(212, 231, 255));
}
});
}
return sendFileButton;
}

最关键的问题是:
sendSignle(fs.trueFileName); //发送一个信号
这里出了问题,sendSingle()方法怎么样定义啊,我用的是TCP;其中trueFileName是要传输的文件名。
sky123123 2009-03-30
  • 打赏
  • 举报
回复
我也这样做了,单是文件名怎么发给对方呐,用的是TCP。
chaner2002 2009-03-30
  • 打赏
  • 举报
回复
这个我也做了..
可以这样,先将文件名发送过去,用File类的isFile()进行判断,紧接着进行传输,再用length()方法判别文件长度,不为空则new一个JDialog,JDialog添加
两个JButton,一个"是"一个"否",将JButton注册ActionListener事件监听,点击"是"按钮,用IO开始传输,点击"否"则不进行操作.
程序找不到了..提供下思路.

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧