推技术socket聊天室,基础问题,附简单易懂源码
我要实现一秒向客户端浏览器输出一个ok
目前的情况是使用while((newLine = input.readLine()) != null);保持住客户端输出流,连第一个ok都无法输出,除非关闭该socket
以下为全部代码.请看看有啥问题.
import java.io.*;
import java.net.*;
public class ChatServer {
public static void Start(){
Socket socketClient = null;
ServerSocket socketServer = null;
try{
socketServer = new ServerSocket(999,50);
}catch(IOException ex)
{}
while(true){
do{
java.net.Socket s=null;
try{
s= socketServer.accept();
}catch(IOException ex)
{}
ClientThread w = new ClientThread(s);
(new Thread(w, "additional worker")).start();
} while(true);
}
}
public static void main(String args[]){
Start();
}
}
class ClientThread implements Runnable {//extends Thread {
Socket client;
public ClientThread(Socket socket){
client = socket;
}
public void run()
{
try{
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintStream output = new PrintStream(client.getOutputStream());
if(printHeaders(output)){
output.print("ok");
//client.close(); return; //如在这里关闭socket,则可以正常输出
//以下代码要实现一秒向客户浏览器输出一个"ok",可目前的代码一个都输不出..
String newLine;
try{
while((newLine = input.readLine()) != null);
}
catch(SocketException e) { }
client.close();
return;
}
}catch(IOException ex)
{}
}
boolean printHeaders(PrintStream ps)
throws IOException
{
return printHeaders(ps, null);
}
boolean printHeaders(PrintStream ps, String newHeaders)
{
boolean ret = false;
ret = true;
String headers = "HTTP/1.0 200 OK\r\nServer: OpenCHAT Server\r\nDate: " + new java.util.Date() + "\r\n" + "Connection: keep-alive\r\n" + "Cache-Control: no-cache,no-store,max-age=0\r\n" + "Pragma: no-cache\r\n" + "Content-type: text/html; charset=gbk\r\n\r\n";
ps.write(headers.getBytes(), 0, headers.length());
return ret;
}
}