当前位置:首页 > 用java实现聊天室基础互动
} }
}
}
} 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) { }
共分享92篇相关文档