我写了一个SOCKET程序:服务端监听,来自客户端的请求,当accept()时,开启新线程。处理这个请求,处理结束后不关闭该线程一直循环,直到请求为一个特殊标记时才推出循环 关闭SOCKET。下面是代码。
服务端:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;import com.SocketServer.Handle.Handle;public class SocketServer extends Thread{
private ServerSocket srvSocket=null;//创建服务端SOCKET实例
private Socket socketClient = null;
public SocketServer(int port){
try {
this.srvSocket = new ServerSocket(port);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void run(){
while(true){
try{
socketClient = srvSocket.accept();
(new Handle(socketClient)).start();

}catch(IOException ie){
ie.printStackTrace();
}
}
}

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

int port =3002;
System.out.println("服务器开始监听端口:"+port);
SocketServer server=new SocketServer(port);
server.start();
}
} import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;public class Handle extends Thread{
private Socket socketClient;
private HandRequest hr;
private BufferedWriter buffWriter;
private ByteArrayOutputStream byteOutput;
private BufferedInputStream bufferInput;

public Handle(Socket socket){
this.socketClient = socket;
}

public void run(){
System.out.println(this.socketClient.isConnected());
System.out.println(Thread.currentThread().getName());
try{
byteOutput = new ByteArrayOutputStream();
bufferInput = new BufferedInputStream(socketClient.getInputStream());

byte[] buf=new byte [1024];
int size=bufferInput.read(buf);
String interMsg=null;
if(size>=0){
interMsg=new String(buf,0,size);
while(interMsg!=null){
hr =new HandRequest(interMsg);
String strMessage=hr.responseMsg();
System.out.println("返回信息:"+strMessage);
//把返回结果写入SOCKET中
buffWriter=new BufferedWriter(
new OutputStreamWriter(socketClient.getOutputStream()));//将文本写入字符输出流,缓冲各个字符
buffWriter.write(strMessage, 0, strMessage.length());//write(String s,int off,int len)写入字符串的某一部分。
buffWriter.flush();//刷新该流的缓冲

interMsg=new String(buf,0,size);
break;
}
buffWriter.close();
bufferInput.close();
byteOutput.close();
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(this.socketClient!= null){
try {
this.socketClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

}
public class HandRequest {
private String msg;
public HandRequest(String msg){
this.msg = msg;
}
public String responseMsg(){
String strReturn ="";
if(this.msg.equals("wkh")){
strReturn = "用户'"+this.msg+"'认证成功!^_^!";
}else{
strReturn = "用户'"+this.msg+"'认证失败!-_-!";
}
return strReturn;
}
}
现在问题是,客户端创建一个SOCKET连接后不关闭该连接,一直使用该连接发送请求。当我发送第一条请求时,能够正常处理,发送第二条请求,就不行了,服务端接收不到请求。想问一下 这个是怎么回事。