您的位置:首页 > 其它

在线聊天系统

2015-11-16 14:18 246 查看
基础知识点:

1. Socket

2. IO流

一、 创建客户端

1. 新建客户端类ChatClient;

2. 通过继承Frame类创建窗口;

3. 在窗口中添加可输入的文本区TextField,和显示文本区Textarea;

4. 添加窗口关闭功能,重写windowclosing方法



二、 创建文本区域

输入文本后,显示文本区域显示输入框中输入的内容,所以为tfTXT添加监听器,选择内部类



三、 创建端口连接

1. 新建客户端类ChatServer;

2. 通过ServerSocket启动服务,创建连接的端口

ServerSocket ss=new ServerSocket(8888);

3. 用accept接收客户端发来的信息

Socket s =ss.accept();

运行后启动server,但是不能多次运行,会报端口被占用bug。可以关闭server重启



四、 创建端口连接

在窗口打开时立刻连接服务端,建一个connect方法:
Sockets=new Socket("10.106.30.32",8888);



五、 将客户端文本框输入的数据发送到服务器端

1. 将Socket s改为全局变量,才能在TFListener中拿到Socket数据;

2. 客户端将字符串往外发送字符串

DataOutputStream doS =new DataOutputStream(s.getOutputStream());

dos.writeUTF(str);

3. 服务器端接收客户端发送的数据

DataInputStream dis =newDataInputStream(s.getInputStream());

String str=dis.readUTF();





运行结果为,客户端第一次输入hello时,服务器收到了并打印了出来,

客户端第二次输入world时,客户端报错



每次输出时我们用了dis.close,注释掉

在结束时清理资源,写一个清理资源的方法disconnect,窗口关闭时断开与服务器的连接



服务器要多次读取数据,所以需要写一个循环,或者while()函数做个判定



当服务器启动时,服务器开始接收数据

当服务器与客户端连接成功后,开始读取数据

一台客户端可以成功发送多个数据

六、 多台客户端连接服务器

多个客户端同时连接服务器端,会出现阻塞,因为readUTF();为阻塞型函数,所以需要建立多个线程,将接收客户端的线程,和处理 客户端数据的线程分开

Client()专门处理线程



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: