java聊天和文件传输


用java的NIO技术编写的 1. 支持聊天功能 2. 拖拽文件可以实现文件传输功能,也可以是文件夹 3. 启动时可以选择server端或client端启动 4. 本人原创,学习NIO和java的网络通信一定会不错 5. 下载下来可以直接导致eclipse,然后运行
资源截图
代码片段和文件信息
package com.im;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

import com.im.util.IConstant;
import com.im.util.Utils;
/**
 * @author xblia
 * 2014年12月12日
 */
public class FileReciveTask extends Thread
{
private IFileTransObserver fileTranObserver;
private SocketChannel socketChannel;

private boolean isRunning;

public FileReciveTask(IFileTransObserver fileTranObserver SocketChannel socketChannel)
    {
    super();
    this.fileTranObserver = fileTranObserver;
    this.socketChannel = socketChannel;
    this.isRunning = true;
    }

@Override
public void run()
{
while(isRunning)
{
ByteBuffer headerBuff = ByteBuffer.allocate(4);
try
            {
            int iDentified= socketChannel.read(headerBuff);
            if(iDentified == -1)
            {
             break;
            }
            if(iDentified == IConstant.LEN_INT)
            {
             headerBuff.flip();
             int iValue = headerBuff.getInt();
             if(iValue == IConstant.FILE_HEADER_IDENTIFIED)
             {
             parseFileHeader(socketChannel);
             }else if(iValue == IConstant.MSG_HEADER_IDENTIFIED)
             {
             parseMsg(socketChannel);
             }
             else
             {
             continue;
             }
            }
            } catch (IOException e)
            {
            e.printStackTrace();
            break;
            }

}
}

private void parseMsg(SocketChannel socket)
    {
ByteBuffer buff = ByteBuffer.allocate(IConstant.LEN_INT);
try
        {
        socket.read(buff);
        buff.flip();
        int iMsgLen = buff.getInt();
        if(iMsgLen != -1)
        {
         buff = readMsg(socket iMsgLen);
        
         byte []data = new byte[iMsgLen];
         buff.get(data);
         String strMsg = new String(data);
         fileTranObserver.notifyMsg(strMsg true);
        
        }
        } catch (IOException e)
        {
        e.printStackTrace();
        } catch (Exception e)
        {
        e.printStackTrace();
        }
    }

private void parseFileHeader(SocketChannel socket)
    {
ByteBuffer fileheadBuff = ByteBuffer.allocate(IConstant.LEN_INT);
try
        {
        socket.read(fileheadBuff);
        fileheadBuff.flip();
        int iFileNameLen = fileheadBuff.getInt();
        if(iFileNameLen != -1)
        {
         fileheadBuff = readMsg(socket iFileNameLen);
        
         byte []data = new byte[iFileNameLen];
         fileheadBuff.get(data);
         String fileName = new String(data);
         fileTranObserver.notifyNextFile(fileName);
        
         fileheadBuff = readMsg(sock

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-12-16 18:07  EasyTranfer_02
     文件         363  2014-12-12 14:35  EasyTranfer_02.classpath
     文件         390  2014-12-16 14:35  EasyTranfer_02.project
     目录           0  2014-12-16 14:35  EasyTranfer_02.settings
     文件         598  2014-12-11 11:18  EasyTranfer_02.settingsorg.eclipse.jdt.core.prefs
     目录           0  2014-12-16 15:17  EasyTranfer_02in
     目录           0  2014-12-16 15:17  EasyTranfer_02incom
     目录           0  2014-12-16 15:17  EasyTranfer_02incomim
     文件        4595  2014-12-16 17:47  EasyTranfer_02incomimFileReciveTask.class
     文件        4859  2014-12-16 17:54  EasyTranfer_02incomimFileSendTask.class
     文件        1251  2014-12-16 15:17  EasyTranfer_02incomimFilesMgr.class
     文件         303  2014-12-16 17:45  EasyTranfer_02incomimIFileTransObserver.class
     文件         193  2014-12-16 15:17  EasyTranfer_02incomimISocketOberser.class
     文件        2287  2014-12-16 17:25  EasyTranfer_02incomimTranferClient.class
     文件        4338  2014-12-16 17:25  EasyTranfer_02incomimTranferServer.class
     目录           0  2014-12-16 17:14  EasyTranfer_02incomimui
     文件        2080  2014-12-16 18:04  EasyTranfer_02incomimuiEasyTransferMainframe$1.class
     文件       10458  2014-12-16 18:04  EasyTranfer_02incomimuiEasyTransferMainframe.class
     文件         164  2014-12-16 15:17  EasyTranfer_02incomimuiITextAreaTask.class
     文件        1889  2014-12-16 16:45  EasyTranfer_02incomimuiJTextPaneEx.class
     文件         711  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu$1.class
     文件         711  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu$2.class
     文件         711  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu$3.class
     文件         711  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu$4.class
     文件         711  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu$5.class
     文件        4731  2014-12-16 16:41  EasyTranfer_02incomimuiTextAreaByMenu.class
     目录           0  2014-12-16 15:17  EasyTranfer_02incomimutil
     文件         782  2014-12-16 17:58  EasyTranfer_02incomimutilIConstant.class
     文件        1084  2014-12-16 15:17  EasyTranfer_02incomimutilT.class
     文件         205  2014-12-16 15:17  EasyTranfer_02incomimutilTimeUnit.class
     文件        1939  2014-12-16 17:57  EasyTranfer_02incomimutilUtils.class
............此处省略22个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)