JAVA制作聊天室(客户端)

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("");

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值