给个思路!

hangerfox 2005-04-22 11:28:50
我有已经做了这么一个东西.有点像聊天程序.
import Mypackage.ComputerManagement2;
import ServerGUI.ServerGUI;
import java.net.*;
import java.io.*;
import java.util.*;


public class ComputerManagement {
protected ServerGUI gui;

public ComputerManagement(int port) throws IOException{

gui=new ServerGUI();
gui.setBounds(100,100,470,400);
gui.show();

ServerSocket server= new ServerSocket(port);
while(true){
Socket client=server.accept();
gui.addMessageToTextArea("来自于"+client.getInetAddress()+"客户端加入\n");
ComputerManagement2 C=new ComputerManagement2(client,gui);
C.start();
}
}

public static void main(String args[])throws IOException{

new ComputerManagement(3030);
}

}

这是服务器开始的地方,为每个连接创建套接字.
******************************************************************************888
package Mypackage;
import java.net.*;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import InterfaceOfClass.InterfaceOfClass;
import ServerGUI.ServerGUI;
public class ComputerManagement2 extends Thread {

Socket socket;
DataInputStream in;
DataOutputStream out;
ServerGUI gui;
protected static Vector Computers=new Vector();

public ComputerManagement2 (Socket socket,ServerGUI gui) throws IOException {
this.socket = socket;
this.gui=gui;
in = new DataInputStream (new BufferedInputStream (socket.getInputStream()));
out = new DataOutputStream (new BufferedOutputStream (socket.getOutputStream()));
}

public void run () {
int count=0;
InterfaceOfClass ForTask=null;

Computers.addElement(this);
Enumeration projects=InterfaceOfClass.returnHash().elements();
Enumeration projects1=InterfaceOfClass.returnHash().elements();

while(projects.hasMoreElements())
{count++;projects.nextElement();}

try{
while(true){
String message=in.readUTF();
if(message.equals("Ready1"))
{gui.addMessageToTextArea("Ready1\n");
out.writeUTF((new Integer(count)).toString());
out.flush();
}
else if(message.equals("Ready2"))
for(int i=1;i<=count;i++)
{InterfaceOfClass ForSendName=(InterfaceOfClass)projects1.nextElement();
out.writeUTF(ForSendName.getProjectName());
out.flush();
}
else if(message.equals("RequestForTaskTheFirstTime"))
{String message1=in.readUTF();
ForTask=(InterfaceOfClass)InterfaceOfClass.returnHash().get(message1);
ForTask.setStream(in,out);
out.writeUTF(ForTask.getClassName());
out.flush();
gui.addMessageToTextArea(message1);
ForTask.SendClassBytesToClient();
gui.addMessageToTextArea("发送成功\n");
}
else if(message.equals("RequestForData"))
{ Class c1=ForTask.ServerClassInstance
Object c=ForTask.ServerInstance;

Class[] paramsCls=new Class[1];
paramsCls[0]=InterfaceOfClass.class;
Method method=c1.getMethod("set",paramsCls);
Object[] args=new Object[1];
args[0]=ForTask;
method.invoke(c,args);

Class[] paramsCls1=new Class[1];
paramsCls1[0]=java.lang.String.class;
Method method1=c1.getMethod("fortest2",paramsCls1);
Object[] args1=new Object[1];
args1[0]="测试";
method1.invoke(c,args1);


}


}

}catch(Exception e){
e.printStackTrace();
}finally{
gui.addMessageToTextArea("来自于"+socket.getInetAddress()+"客户端退出\n");
Computers.removeElement(this);
try{socket.close();}catch(IOException e){e.printStackTrace();}
this.stop();}

}//run

}
这是处理部分。包括了类动态加载(包括了很多类,每个都是独立的)。
==============================================================================
我现在的想法是被加载的类怎么利用这些套接字进行通信呢?(每个类都要拥有一些套接字)。
***************************************************************************************]
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hangerfox 2005-04-25
  • 打赏
  • 举报
回复
请斑竹删除此贴!
shan1119 2005-04-22
  • 打赏
  • 举报
回复
ding
kaleon 2005-04-22
  • 打赏
  • 举报
回复
同顶,太长了。
parol2910 2005-04-22
  • 打赏
  • 举报
回复
帮顶。。。呵呵。
hangerfox 2005-04-22
  • 打赏
  • 举报
回复
类管理和加载器部分。



package InterfaceOfClass;
import java.net.*;
import java.io.*;
import java.util.*;


public class InterfaceOfClass extends ClassLoader
{ private String ProjectName=null;
private String path=null;
private String ServerClassName=null;
private String ClientClassName=null;
private byte[] classByteOfServerClass=null;
private byte[] classByteOfClientClass=null;
public Class ServerClassInstance=null;
public Object ServerInstance=null;
private DataOutputStream out=null;
private DataInputStream in=null;

private static Hashtable projects=new Hashtable();

public InterfaceOfClass(String ProjectName,String path,String ServerClassName,String ClientClassName){
super();
this.ProjectName=ProjectName;
this.path=path;
this.ServerClassName=ServerClassName;
this.ClientClassName=ClientClassName;

}



public static Hashtable returnHash(){

return projects;

}



public byte[] findClassBytes(String className){

try{
FileInputStream inFile = new FileInputStream(path+ "/"+className+".class");

byte[] classBytes = new byte[inFile.available()];
inFile.read(classBytes);
return classBytes;

} catch (java.io.IOException ioEx){return null;}

}


public Class findClass(String className)throws
ClassNotFoundException{

byte[] classBytes = findClassBytes(className);

if (classBytes==null){
throw new ClassNotFoundException();
}
else{//System.out.println(classBytes.length+"");
Class myclass=defineClass(className, classBytes,
0, classBytes.length);
// System.out.println(myclass.getClassLoader()+" ");
resolveClass(myclass);
return myclass;
}

}
public void newInstance()
{try{ ServerClassInstance.newInstance();}
catch(InstantiationException ex4){ex4.printStackTrace();}
catch(IllegalAccessException ex6){ex6.printStackTrace();}

}

public void setBytes()
{
classByteOfServerClass=findClassBytes(ServerClassName);
classByteOfClientClass=findClassBytes(ClientClassName);
}

public void setInstance(Class Instance)
{ServerClassInstance=Instance;
}

public void setIn(Object a)
{ServerInstance=a;
}

public void setStream(DataInputStream in,DataOutputStream out)
{this.in=in;
this.out=out;

}


public String getProjectName(){
return ProjectName;
}

public String getClassName()
{return ClientClassName;}

public void SendClassBytesToClient()
{
try{
out.write(classByteOfClientClass);
out.flush();}
catch(IOException ex){ex.printStackTrace();}
}

public void SendDataToClient(String data)
{ try{out.writeUTF(data);
out.flush();}
catch(IOException e){e.printStackTrace();}
}


public String ReceiveDataFromClient()
{ try{String temp=null;
temp=in.readUTF();
return temp;}
catch(IOException e){e.printStackTrace();return null;}

}





}



hangerfox 2005-04-22
  • 打赏
  • 举报
回复
已解决!谢谢!
baggio5277 2005-04-22
  • 打赏
  • 举报
回复
也顶! 太长了,上班没时间看啊!
MARS.nEIL 2005-04-22
  • 打赏
  • 举报
回复
帮顶,学习..
dj0517 2005-04-22
  • 打赏
  • 举报
回复
up

62,615

社区成员

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

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