JAVA制作聊天室(客户端)
最近一个朋友的女儿,由于考试题目是这个(2006年1月的题目),让帮忙做个聊天室,写完后,看看代码中有线程,套接字等技术,整理下,给有需要的朋友!
/*客户端连接(myClient.java)*/
package itbaby.jchat;
import java.net.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;
public class myClient extends Thread
{
static Socket server;
TextArea jTextArea1;
List List1;
PrintWriter out;
OutputStream outs;
String sUserName ;
String sIPAddr;
public myClient(TextArea _jTextArea1,List _List1,String _sUserName,String sIP)
{
this.jTextArea1 = _jTextArea1;
this.List1 = _List1;
this.sUserName = _sUserName;
this.sIPAddr = sIP;
}
public void SendMessage(String sMessage)//发送公聊消息
{
out.println("["+this.sUserName + "]:" + sMessage);
out.flush();
}
public void SendMessagePrivate(String privateUser,String sMessage)//发送私聊消息
{
out.println("sendto:"+privateUser+"["+this.sUserName + "]:"+ sMessage);
out.flush();
}
public void SendWelcome()//发送欢迎消息给服务器,由服务器广泊消息
{
out.println("cmd:welcome"+sUserName);
out.flush();
}
public void run()
{
try
{
myClient.server = new Socket(this.sIPAddr, 2005);
outs = server.getOutputStream();
out = new PrintWriter(outs);
myClientThread myCT = new myClientThread(this.jTextArea1,this.List1);
myCT.start();
this.SendWelcome();
//BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
/*while (true) //控制台方式的测试客户端
{
String str = wt.readLine();
out.println(str);
out.flush();
if (str.equals("end"))
break;
}
out.close();
server.close();*/
}
catch(Exception ex)
{
String exmsg = ex.getMessage();
System.out.println(exmsg);
}
}
public static void main(String[] args)throws Exception
{
}
}
/*客户端的线程处理程序(myClientThread.java)*/
package itbaby.jchat;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
public class myClientThread extends Thread
{
TextArea jTextArea1;
java.awt.List List1;
public myClientThread(TextArea _jTextArea1,java.awt.List _List1)
{
this.jTextArea1 = _jTextArea1;
this.List1 = _List1;
}
public void run()
{
while(true)
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(myClient.server.getInputStream()));
String sMsg = in.readLine();
if(sMsg.indexOf("cmd:userlist")!=-1)
{
//用户列表
sMsg = sMsg.substring(12,sMsg.length());
this.List1.removeAll();
String sUsr = "";
for(int i=0;i<sMsg.length();i++)
{
if(sMsg.charAt(i)=='|') //用户名称都使用|分隔
{
this.List1.add(sUsr);
sUsr = "";
}
else
sUsr = sUsr + String.valueOf(sMsg.charAt(i));
}
}
else
this.jTextArea1.append(sMsg+'/n');//聊天信息
}
catch(Exception ex)
{
String exmsg = ex.getMessage();
System.out.println(exmsg);
}
}
}
}
/*简单的描述客户端GUI的程序,GUI省去*/
//在系统加载后,点击登录按钮后,执行初始化客户端连接
myClient mClient; //全局类
//TextArea1 消息显示
//List1 用户列表
//jTextField1 消息输入区
//jTextField4 文件传输路径名
mClient = new myClient(TextArea1,List1,jTextField1.getText(),jTextField4.getText());
mClient.start();
//有一个发送按钮,点击时,执行如下代码
if(jTextField2.getText().length()==0)return;
if(checkbox1.getState())//私聊信息
{
if (jLabel4.getText().length() != 0)
mClient.SendMessagePrivate(jLabel4.getText(),
this.jTextField2.getText());
}
else//公聊
mClient.SendMessage(jTextField2.getText());
jTextField2.setText("");