端口只是来监听的,当然可以再accept(),然后用多线程,为每个连接开辟一个线程
ServerSocket ChatServer=new ServerSocket(port);
while(true)
{
Socket client=ChatServer.accept();
Chat oneclient=new Chat(IS_Require);
Thread MST_Moniter=new Thread(oneclient);
MST_Moniter.start();
}chat 是一个实现了runnable interface的类
ServerSocket ChatServer=new ServerSocket(port);
while(true)
{
Socket client=ChatServer.accept();
Chat oneclient=new Chat(IS_Require);
Thread MST_Moniter=new Thread(oneclient);
MST_Moniter.start();
}chat 是一个实现了runnable interface的类
解决方案 »
- 笔试问题
- java读取大文件并显示的问题
- TXT文件无法上传到指定的文件夹当中
- 紧急求助[亿万分的感谢!!]:java 调用 sqlserver2000 dts
- NetBeansIDE自己下载subversion问题
- 关于static ,final修饰函数
- 怎么样用流的方式读取dbf文件中的数据
- java在linux下面调试的怪问题。
- Borland 产品试用光盘中的Together® Edition for JBuilder®谁有注册码,能帮我通过注册,哪怕只用几个月也可以,送100分
- 你说要实现QQ那样的软件或者说那种规模、形式的软件最重要的是什么?
- 这样的方法怎么写?送500分
- 我是一个JAVA初学者,我想做一个手机短信,请各位给点提示.
可是他抛出错误 说端口被使用了
这和client有关系吗?
也放到了while循环里面了吧?
@descrip: 服务器端信息发送
@ver 1.0
@author: whyin
@date 2001.11.08
*/import java.io.*;
import java.net.*;
import javax.swing.*;//Server Thread Process
class ServerThread extends Thread {
boolean listener_begin = true ; // 监视端口信息
Socket socket ;
ServerSocket serverSocket = null ;
public static String recData = null;
public static String sendData = null ;
BufferedReader in = null ;
PrintWriter out =null; //init Serverprocess : build ServerSocket
public ServerThread(Socket socket){
try{
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//创建输出流
}catch(IOException ie){
messagebox("ServerThread contruck: "+ie.toString());
return;
}
} //Thread run()
public void run(){
try{
recData = readStream(in);
System.out.println("recData" + recData);
sleep(6);
}catch(java.lang.InterruptedException ine ){
System.out.println("41 行 sleep() 原因:"+ine.toString());
}
} /* void sendData
Descrip:发送数据
parm:Socket
*/
public void sendData(String s){
//try{
//PrintWriter out = new PrintWriter(sendSocket.getOutputStream(),true);
out.println("服务器:接到了!");
out.println(s);
//}catch(IOException e){
// messagebox(e.toString());
//}
}
/* void getReceiveData
descrip:获得接受的数据
return:String
*/
public String getReceiveData(){
return recData;
}
/* void getReceiveData
descrip:获得接受的数据
return:String
*/
public String getSend(){
return sendData;
}
/* void readString
Descrip 由BufferedReader读出数据
pram: InputStream in
return: String
*/
public String readStream(BufferedReader input){
boolean begin = false ;
String sData= null;
String line = null ;
try{
while (!begin){
line = null;
line = input.readLine();
if (line == null || line.trim().equals("whynetend_temp001")){
begin = true;
}else{
if (sData == null){
sData=line ;
// System.out.println("sss"+sData);
}else {
sData = sData+"\n"+line;
// System.out.println(sData);
}
}
}
//System.out.println(sData);
}catch (IOException e){
messagebox(e.toString());
return sData;
}
return sData ;
} /* void messagebox
descrip: 提示信息
parm: String s
*/
void messagebox(String s){
JOptionPane.showMessageDialog(null, "出错:"+s, "系统信息", JOptionPane.ERROR_MESSAGE);
}
}//主服务器类----------------------------------------------------------------------//
public class ServerSM{
public static int sendport = 1210 ;
static int port=9999 ;
public static Socket socket=null;
public ServerSM(){
}
public ServerSM(int port){
this.port = port ;
}
public static void main(String args[]) throws IOException{
serverStart();
}
public static void serverStart(){
ServerSocket serverSocket = null;
try{
serverSocket=new ServerSocket(port);//在9999端口创建套接口
System.out.println("Server start.."+serverSocket);
while(true){
socket=serverSocket.accept();//无限监听客户的请求
sendport = socket.getPort();
System.out.println("Connectino accept:"+socket +" PORT" + socket.getPort());
ServerThread thread = new ServerThread(socket);//创建新线程
thread.start();
}
}catch(IOException ie){
System.out.println("创建ServerSocket出错:" + ie.toString());
}finally{
try{
serverSocket.close();
}catch(IOException e){}
}//捕或异常
}
}//服务器程序结束
//----------------------------//
希望兄弟好好研究研究,这也是我自己写来的
因为你没有释放呀
你的程序没有正常结束
或者你干脆没有写端口释放语句
前几天我也在做一个类似的程序
细心找找
注意,每个用户退出时
你要将他的socket对象释放
socket怎么释放呢?socket=null;可以吗?还有我想把线程也释放掉,用什么方法放的最干净呢?
取得打开的端口。
socket.close();
socket流.close();
线程结束最好能有个线程结束标志,当标志为真时退出线程的run方法。