package ict.ff.ipmsg;
import java.io.*;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.charset.Charset;
import java.util.*;
public class IpmsgChannel {
private class ServerSockThread extends Thread {
public void run()
{
try
{
while(!isclosed)
{
Socket sock = server.accept();
byte buffer[] = new byte[300];
InputStream input = sock.getInputStream();
int length = input.read(buffer);
FileData file = getFileData(buffer, length);
if(file == null)
{
sock.close();
} else
{
int mode = IPMSG.GET_MODE(file.attr);
AutoPipe pipe = null;
if(mode == 1)
pipe = new AutoPipe(new FileInputStream(file.name), sock.getOutputStream());
else
if(mode == 2)
pipe = new AutoPipe(new DirectoryInputStream(file.name), sock.getOutputStream());
if(pipe != null)
pipe.start();
else
sock.close();
}
}
}
catch(IOException ioexception)
{
// break MISSING_BLOCK_LABEL_249;
}
// break MISSING_BLOCK_LABEL_208;
// Exception exception;
// exception;
if(server != null)
try
{
server.close();
server = null;
}
catch(IOException e)
{
e.printStackTrace();
}
// throw exception;
if(server != null)
try
{
server.close();
server = null;
}
catch(IOException e)
{
e.printStackTrace();
}
// break MISSING_BLOCK_LABEL_287;
if(server != null)
try
{
server.close();
server = null;
}
catch(IOException e)
{
e.printStackTrace();
}
}
private FileData getFileData(byte buffer[], int length)
{
String parts[];
int packetID;
String msg = getMessage(buffer, length);
parts = msg.split(":");
packetID = Integer.parseInt(parts[0], 16);
int fileID = Integer.parseInt(parts[1], 16);
ArrayList arraylist = waitingList;
// JVM INSTR monitorenter ;
Iterator iterator = waitingList.iterator();
while(iterator.hasNext())
{
FileData file = (FileData)iterator.next();
if(file.packetID == packetID && file.fileID == fileID)
return file;
}
// arraylist;
// JVM INSTR monitorexit ;
// goto _L1
// arraylist;
// JVM INSTR monitorexit ;
// throw ;
//_L1:
return null;
}
final IpmsgChannel this$0;
private ServerSockThread() {
this$0 = IpmsgChannel.this;
// super();
}
ServerSockThread(ServerSockThread serversockthread) {
this();
}
}
public IpmsgChannel() throws IOException {
this(null, null);
}
public IpmsgChannel(String nickname, String groupname) throws IOException {
charset = null;
this.name = null;
this.hostname = null;
this.nickname = null;
this.groupname = null;
absenceInfo = null;
members = null;
listeners = null;
isclosed = false;
packetNo = 0;
channel = null;
sendBuffer = null;
receiveBuffer = null;
serverThread = null;
server = null;
waitingList = null;
members = new ArrayList();
listeners = new Observable[4];
for (int i = 0; i < 4; i++)
listeners[i] = new Observable() {
public void notifyObservers(Object arg) {
super.setChanged();
super.notifyObservers(arg);
}
final IpmsgChannel this$0;
{
this$0 = IpmsgChannel.this;
// super();
}
};
charset = "GB2312";
absenceInfo = "Not absence mode";
String name = System.getProperty("user.name");
String hostname = InetAddress.getLocalHost().getHostName();
setName(name);
setHostName(hostname);
setNickName(nickname);
setGroupName(groupname);
channel = DatagramChannel.open();
channel.configureBlocking(false);
DatagramSocket socket = channel.socket();
socket.setReuseAddress(true);
socket.setBroadcast(true);
socket.bind(new InetSocketAddress(2425));
sendBuffer = ByteBuffer.allocateDirect(8192);
receiveBuffer = ByteBuffer.allocateDirect(8192);
server = new ServerSocket(2425);
serverThread = new ServerSockThread(null);
serverThread.start();
waitingList = new ArrayList();
}
public String getNickName() {
return nickname;
}
public String getName() {
return name;
}
public String getHostName() {
return hostname;
}
public ArrayList getMembers() {
return members;
}
public boolean setNickName(String nickname) {
if (nickname == null || nickname.indexOf(":") != -1) {
this.nickname = "";
return false;
} else {
this.nickname = nickname;
return true;
}
}
public boolean setGroupName(String groupname) {
if (groupname == null || groupname.indexOf(":") != -1) {
this.groupname = "";
return false;
} else {
this.groupname = groupname;
return true;
}
}
protected boolean setName(String name) {
if (name == null || name.indexOf(":") != -1) {
this.name = "no name";
return false;
} else {
this.name = name;
return true;
}
}
protected boolean setHostName(String hostname) {
if (hostname == null || hostname.indexOf(":") != -1) {
this.hostname = "no name";
return false;
} else {
this.hostname = hostname;
return true;
}
}
public boolean setAbsence(String absenceInfo) {
if (absenceInfo == null || absenceInfo.indexOf(":") != -1) {
this.absenceInfo = "Not absence mode";
return false;
} else {
this.absenceInfo = absenceInfo;
return true;
}
}
public String getCharsetName() {
return charset;
}
public void setCharsetName(String charset) {
if (Charset.isSupported(charset)) {
this.charset = charset;
} else {
this.charset = Charset.defaultCharset().name();
System.out.println((new StringBuilder("cannot encode in charset:"))
.append(charset).append("switch to default:").append(
this.charset).toString());
}
}
public boolean readAndDispatch() {
SocketAddress address = null;
receiveBuffer.clear();
try {
address = channel.receive(receiveBuffer);
} catch (IOException e) {
e.printStackTrace();
}
if (address == null) {
return false;
} else {
receiveBuffer.flip();
byte data[] = new byte[receiveBuffer.remaining()];
receiveBuffer.get(data);
processDatagramPacket(address, data);
return true;
}
}
public void close() {
isclosed = true;
try {
if (channel != null)
channel.close();
if (server != null) {
server.close();
server = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void addListener(int eventType, Observer listener) {
if (eventType >= listeners.length)
throw new IllegalArgumentException("unknown event type");
没有合适的资源?快使用搜索试试~ 我知道了~
Java即时通讯源代码
共82个文件
class:57个
java:20个
classpath:1个
5星 · 超过95%的资源 需积分: 10 111 下载量 100 浏览量
2009-11-23
16:56:42
上传
评论 2
收藏 174KB RAR 举报
温馨提示
Java即时通讯源代码,即时通讯软件,文字,文件传输
资源推荐
资源详情
资源评论
收起资源包目录
Java即时通讯源代码.rar (82个子文件)
test
.project 665B
bin
ict
ff
ipmsg
ExitListener.class 764B
IpmsgChannel$ServerSockThread.class 3KB
IpmsgSocket$Buffer.class 564B
AutoPipe.class 2KB
DirectoryOutputStream.class 4KB
IpmsgSocket$ReceiveFileThread.class 1KB
IpmsgSocket.class 10KB
DirectoryOutputException.class 394B
IpmsgSocket$SuperviseThread.class 592B
IpmsgSocket$SocketThread.class 1KB
IpmsgChannel.class 19KB
MemberEvent.class 452B
MessageListener.class 779B
EntryListener.class 768B
IpmsgSocket$1.class 748B
IpmsgSocket$OutputThread.class 849B
IpmsgSocket$FileTransferThread.class 601B
AutoPipe$PipeThread.class 2KB
IPMSG.class 4KB
Member.class 759B
IpmsgChannel$1.class 754B
MessageEvent.class 573B
FileData.class 519B
DirectoryInputStream.class 4KB
ui
MainFrame$11.class 1009B
ConfigDialog$3.class 1KB
MainFrame$12.class 1KB
MainFrame$6.class 2KB
StringToken.class 3KB
MainFrame$15.class 1KB
MessageDialog$1.class 3KB
ConfigDialog$4.class 994B
MainFrame$2.class 1KB
MainFrame$14.class 1KB
MainFrame$17.class 809B
ConfigDialog$2.class 749B
Config.class 3KB
MainFrame$5.class 2KB
MainFrame$18.class 1KB
MainFrame$1.class 889B
MessageDialog$2.class 1KB
ConfigDialog.class 10KB
MainFrame$3.class 826B
MainFrame$13.class 832B
MainFrame$8.class 1KB
MessageDialog$4.class 2KB
MainFrame.class 14KB
ConfigDialog$1.class 1KB
MainFrame$9.class 988B
MainFrame$7.class 742B
MessageDialog.class 11KB
MainFrame$10.class 2KB
MessageDialog$5.class 1KB
MainFrame$16.class 808B
MessageDialog$3.class 2KB
MainFrame$4.class 1KB
test
Activator.class 822B
META-INF
MANIFEST.MF 237B
src
ict
ff
ipmsg
Member.java 812B
FileData.java 510B
DirectoryInputStream.java 4KB
DirectoryOutputStream.java 4KB
MessageListener.java 520B
ExitListener.java 441B
DirectoryOutputException.java 235B
MemberEvent.java 254B
EntryListener.java 447B
IpmsgSocket.java 11KB
MessageEvent.java 292B
IPMSG.java 4KB
IpmsgChannel.java 24KB
AutoPipe.java 3KB
ui
Config.java 3KB
MainFrame.java 18KB
ConfigDialog.java 12KB
MessageDialog.java 13KB
StringToken.java 5KB
test
Activator.java 1KB
.classpath 359B
lib
IPMSG.jar 78KB
build.properties 80B
共 82 条
- 1
资源评论
- -FAQ-2016-01-07很好 可以借鉴
- 一夕4562015-04-26很好 可以借鉴
- Napoleonapo2015-07-16好像是飞鸽传书的简单版本
- feng的微笑2016-10-27Java即时通讯源代码,即时通讯软件,文字,文件传输
- B_K_B12015-11-18很好 可以借鉴
huangailong3
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功