//main Vector vec4Sock = new Vector(); // or use other collection such as hashtable ... //pass the parameters and the vec4Sock into the Thread ... socketInThread = vec4Sock.getNext(); //if socket can be close //close socketInThread//inside the thread // .... // mySocket = socket(...); // vec4Sock.add(mySocket);
Vector vec4Sock = new Vector(); // or use other collection such as hashtable
...
//pass the parameters and the vec4Sock into the Thread
...
socketInThread = vec4Sock.getNext();
//if socket can be close
//close socketInThread//inside the thread
// ....
// mySocket = socket(...);
// vec4Sock.add(mySocket);
你的意思是在thread.run里面不停的判断那个标志?
import java.util.*;
import java.net.*;class TCPCCSocket extends Thread
{
private Socket CCSocket;
TCPCCSocket (Socket cs)
{
CCSocket = cs;
}
public void start()
{
System.out.println("Starting CCS...");
super.start();
}
public void closeSocket()
{
try
{
System.out.println("Close CCS...");
super.stop();
CCSocket.close();
}
catch(IOException exClose)
{
System.out.println("Error When Close CCS ...");
exClose.printStackTrace();
}
}
public void run()
{
System.out.println("Running CCS...");
System.out.println(toString());
byte[] readingByte = { 0 };
try
{
while(readingByte[0] != -1)
{
readingByte[0] = (byte)CCSocket.getInputStream().read();
CCSocket.getOutputStream().write(readingByte[0]);
}
}
catch(IOException exEcho)
{
System.out.println("Error When Echo CCS ...");
}
try
{
CCSocket.close();
}
catch(IOException exClose)
{
System.out.println("Error When Close CCS ...");
exClose.printStackTrace();
}
System.out.println("End Running CCS...");
super.stop();
}
}
import java.util.*;
import java.net.*;class TCPServerSocketThread extends Thread
{
private static ServerSocket ListeningSocket;
private Vector CCSArray;
private int CCSCount;
private static int SocketsCount;
private static int LPort;
private Socket tmpCCS; TCPServerSocketThread (Vector targetSocketArr, int ListenPort)
{
ListeningSocket = null;
SocketsCount = 0;
if(ListenPort > 1024)
LPort = ListenPort;
else
LPort = 10000;
CCSArray = targetSocketArr;
} TCPServerSocketThread (Vector targetSocketArr)
{
ListeningSocket = null;
SocketsCount = 0;
LPort = 10000;
CCSArray = targetSocketArr;
} public void stopServer()
{
try
{
System.out.println("Close All CCS...");
int sockCount = CCSArray.size();
TCPCCSocket tmpWCCS;
while(sockCount > 0)
{
tmpWCCS = (TCPCCSocket)CCSArray.elementAt((sockCount - 1));
System.out.println("Close Next CCS...");
if(tmpWCCS != null)
tmpWCCS.closeSocket();
CCSArray.remove((sockCount - 1));
sockCount -- ;
}
System.out.println("Close Server Socket...");
ListeningSocket.close();
SocketsCount -= 1;
super.stop();
}
catch(IOException exFL)
{
System.out.println("Exception On Close Server Socket...");
exFL.printStackTrace();
}
}
public void run()
{
System.out.println("Run Server Thread...");
System.out.println(toString());
if(ListeningSocket == null)
return;
TCPCCSocket tmpWCCS;
while(true)
{
try
{
System.out.println("Server Thread Listening...");
tmpCCS = ListeningSocket.accept();
System.out.println(tmpCCS.toString());
tmpWCCS = new TCPCCSocket(tmpCCS);
CCSArray.add(tmpWCCS);
tmpWCCS.start();
CCSCount += 1;
}
catch(IOException exRL)
{
System.out.println("Exception On Server Thread Listening...");
exRL.printStackTrace();
}
}
}
public void startServer()
{
System.out.println("Start Server Thread...");
if(SocketsCount != 0)
return;
SocketsCount += 1;
try
{
System.out.println("Create Server Socket...");
ListeningSocket = new ServerSocket(LPort);
super.start();
}
catch(IOException exLS)
{
System.out.println("Exception On Create Server Socket...");
exLS.printStackTrace();
}
}
}
to zych72(闹闹):
你的意思是在thread.run里面不停的判断那个标志?
是的,这样处理socket的thread可以在退出之前处理好后事