java简单的聊天室
用java写一个聊天室,当客服端输入start时,服务端每10秒自动给客服端回复一个信息。(我实现不了自动,大家帮帮忙)我个人估计是输出堵塞,只输出了第一次,后面被堵住了。 我调试的时候,如果我先结束客服端程序,服务端会出错,说明还在做输出动作。 但是我先关掉服务端就没事。谢各位大侠了。我现在目前想实现的功能就是输入start能不断地接受到服务器的回复。
服务端代码:
package qhliao;
import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.*;
import qhliao.test.Client;
public class Server {
public static void main(String[] args) {
List<serverHandle> clients = new ArrayList<serverHandle>();//服务端的总数
try{
ServerSocket ss=new ServerSocket(3300);
System.out.println("等待连接........");
Socket sk =ss.accept();
serverHandle sh=new serverHandle(sk);
Thread th1=new Thread(sh);////////
th1.start();
clients.add(sh);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
class serverHandle implements Runnable{
Socket sk1;
DataInputStream in;
DataOutputStream out;
public serverHandle(Socket sk)
{
this.sk1=sk;
try{
in= new DataInputStream(sk1.getInputStream());
out=new DataOutputStream(sk1.getOutputStream());
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendmessage()throws IOException{
int i =0;
while(true)
{
String s="谢谢你";
out.flush();
out.writeUTF(s);
out.flush();
System.out.println(i);
i=i+2;
//Thread.sleep(1000);
}
}
public void run(){
try{
int i=0;
String str =in.readUTF();
System.out.println(str);
out.flush();
if(str.equals("start")){
//while(true){
// i++;
// System.out.println(i);
sendMessage sM=new sendMessage(sk1);
Thread th2=new Thread(sM);
th2.start();
//sendmessage();
// out.println("你好吗");
//out.flush();
//}
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
class sendMessage implements Runnable{
Socket sk2;
DataInputStream in;
DataOutputStream out;
String str0="信心";
sendMessage(Socket sk)
{
this.sk2=sk;
try{
in= new DataInputStream(sk2.getInputStream());
out=new DataOutputStream(sk2.getOutputStream());
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void sendMsg()//自动回复函数,这个函数会被多次循环
{
try{
out.writeUTF(str0);//不实施多次回复
out.flush();
System.out.println("1111");//实施多次输出
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run(){
while(true){
try{
Thread.sleep(1000);
//out.writeUTF();
sendMsg();//此处调用回复函数,但总是不能多次回复,只能回复一次!!!!!
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
客服端代码:
package qhliao;
import java.net.*;
import java.io.*;
public class ExamClient {
static Socket svr;
public static void main(String[] args)throws Exception {
System.out.println("正在连接服务器,请稍后......");
svr=new Socket(InetAddress.getLocalHost(),3300);
if(svr!=null)
{
System.out.println("与"+svr.getInetAddress()+"连接成功,请输入要传送的信息...");
DataInputStream in=new DataInputStream(svr.getInputStream());
DataOutputStream out =new DataOutputStream (svr.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=wt.readLine();
out.writeUTF(str);//输出服务端发来的信息
out.flush();
if(str.equals("stop")){
System.out.println(in.readUTF());
in.close();
out.close();
System.out.println("已和服务器断开");
break;
}
System.out.println(in.readUTF());
}
svr.close();
}
else{
System.out.println("连接失败");
svr.close();
}
}
}