用java实现聊天室基础互动 联系客服

发布时间 : 星期日 文章用java实现聊天室基础互动更新完毕开始阅读e07ae379657d27284b73f242336c1eb91b373311

} }

}

}

} catch (Exception e) { }finally{ }

//处理客户端断开连接后的操作

//将该客户端的输出流从共享集合中删除 synchronized (allout) { allout.remove(pw); }

//广播该客户下线了

sendMessage(host+\下线了,当前在线人数:\人\/*

* 将针对该客户端的Socket关闭以释放资源 */ try { socket.close(); } catch (IOException e) { e.printStackTrace(); }

客户端代码如下:

package chat;

import java.io.BufferedReader; import java.io.InputStream;

import java.io.InputStreamReader; import java.io.OutputStream;

import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; /**

* 聊天室客户端 * @author hw

*TCP是传输层协议 *HTTP是应用层协议 */

public class Client { /* * java.net.Socket * 套接字 * Socket封装了TCP通讯协议,使用它可以基于 * TCP协议与远程计算机通讯。 */

private Socket socket;

Scanner scanner = new Scanner(System.in); /*

* 客户端的构造方法用来初始化客户端 * @throws Exception */

public Client() throws Exception{ try{ /*

* 实例化Socket时,构造方法要求传入 * 两个参数:

* 1:String,指定服务端的IP地址

* 2:int, 指定服务端打开的服务端口号 * 通过IP地址,可以找到服务端所在计算器 * 应用程序。 */

System.out.println(\正在连接服务端...\ socket = new Socket(\指自身电脑的IP;也可以换成其他电脑的IP System.out.println(\与服务端建立连接!\ }catch(Exception e){ //记录日志 throw e; } } /*

* 启动客户端方法 * * */

public void start(){ try{ /* * Socket提供了方法:

* OutputStrem getOutputStream()

* 该方法可以获取一个输出流,通过该输出流写出 * 的数据会发送远端,这里的远端就是服务器 */

OutputStream out = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(out,\ PrintWriter pw = new PrintWriter(osw,true); /*

* 通过Socket创建输出流,用于将消息发送给客户端 */ ServerHandler handler = new ServerHandler(); Thread t = new Thread(handler); t.start(); String scan = null; long lastSend = System.currentTimeMillis()-1000; while(true){ scan = scanner.next(); if(System.currentTimeMillis()-lastSend<1000){ System.out.println(\说话太快了,请稍等一下!\ }else{ pw.println(scan); lastSend = System.currentTimeMillis(); } } }catch(Exception e){ e.printStackTrace(); } }

public static void main(String[] args) { try{

//实例化客户端

Client client = new Client();

//启动客户端 client.start(); }catch(Exception e){ e.printStackTrace(); System.out.println(\客户端启动失败!\ } } /*

* 该线程用来接收服务端发送过来的每条消息 */

private class ServerHandler implements Runnable{ public void run(){

try {

} } }

InputStream in = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(in,\ BufferedReader br = new BufferedReader(isr); /* * 启动用来接收服务端发送过来的消息 * 的线程 * */ String scan = null; while ((scan = br.readLine())!=null){ System.out.println(scan); }

} catch (Exception e) { }