在线聊天系统
2015-11-16 14:18
246 查看
基础知识点:
1. Socket
2. IO流
一、 创建客户端
1. 新建客户端类ChatClient;
2. 通过继承Frame类创建窗口;
3. 在窗口中添加可输入的文本区TextField,和显示文本区Textarea;
4. 添加窗口关闭功能,重写windowclosing方法
![](http://img.blog.csdn.net/20151116141838041?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二、 创建文本区域
输入文本后,显示文本区域显示输入框中输入的内容,所以为tfTXT添加监听器,选择内部类
![](http://img.blog.csdn.net/20151116141858781?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、 创建端口连接
1. 新建客户端类ChatServer;
2. 通过ServerSocket启动服务,创建连接的端口
ServerSocket ss=new ServerSocket(8888);
3. 用accept接收客户端发来的信息
Socket s =ss.accept();
运行后启动server,但是不能多次运行,会报端口被占用bug。可以关闭server重启
![](http://img.blog.csdn.net/20151116144813928?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、 创建端口连接
在窗口打开时立刻连接服务端,建一个connect方法:
Sockets=new Socket("10.106.30.32",8888);
![](http://img.blog.csdn.net/20151116144838629?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
五、 将客户端文本框输入的数据发送到服务器端
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();
![](http://img.blog.csdn.net/20151116142119111?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](http://img.blog.csdn.net/20151116144922660?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行结果为,客户端第一次输入hello时,服务器收到了并打印了出来,
客户端第二次输入world时,客户端报错
![](http://img.blog.csdn.net/20151116144951631?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
每次输出时我们用了dis.close,注释掉
在结束时清理资源,写一个清理资源的方法disconnect,窗口关闭时断开与服务器的连接
![](http://img.blog.csdn.net/20151116145054015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
服务器要多次读取数据,所以需要写一个循环,或者while()函数做个判定
![](http://img.blog.csdn.net/20151116145131895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
当服务器启动时,服务器开始接收数据
当服务器与客户端连接成功后,开始读取数据
一台客户端可以成功发送多个数据
六、 多台客户端连接服务器
多个客户端同时连接服务器端,会出现阻塞,因为readUTF();为阻塞型函数,所以需要建立多个线程,将接收客户端的线程,和处理 客户端数据的线程分开
Client()专门处理线程
![](http://img.blog.csdn.net/20151116145150020?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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()专门处理线程
相关文章推荐
- ASP.NET速度优化
- Linux入门教程
- 不通过App Store在iOS设备上直接安装应用程序
- Css background背景语法
- HDU 1517 A Multiplication Game(博弈入门)
- 按位异或运算交换两个变量的值原理
- PYQT 可直接通过信号槽,或者 invokeMethod 直接访问QT库的C++插件.
- Ceph命令集合
- 如何在Python中嵌入Rdesktop
- Windows7下使用mingw编译openssl
- Windows7下使用mingw编译openssl
- 转 WWDC 2013 Session笔记 - iOS7中的ViewController切换
- iOS 设计模式——单例模式
- 如何在C语言中调用shell命令
- cf C. Wilbur and Points (STL_vector)
- cf B. Wilbur and Array
- iOS相机与相册的调用常用代码
- TinyOS的个人见解4之任性的cc2538
- iOS开源项目和库
- CRM 2013 自动发送报表