代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
实现的简单的多个客户端聊天程序
作者:
亭
/ 发布于
2014/11/11
/
396
客户端 import java.awt.*; import java.awt.event.*; import java.io.*; import java.lang.*; import java.net.*; public class HeartClient extends Frame { /* * 成员方法出场... */ private TextField tfText; private TextArea taContent; private Socket s; private DataOutputStream dos; private DataInputStream dis; /** * 注意,入口... ^^ * @param args */ public static void main(String[] args) { new HeartClient().launchFrame(); } /** * Loading GU */ public void launchFrame(){ tfText = new TextField(); taContent = new TextArea(); this.setSize(300,300); this.setLocation(300,300); this.tfText.addActionListener(new TFListener()); this.add(tfText,BorderLayout.SOUTH); this.add(taContent,BorderLayout.NORTH); this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); }}); this.pack(); this.connect(); this.setVisible(true); } /** * 我在努力地连接服务器中... */ public void connect() { try { s = new Socket("127.0.0.1",1720); dos = new DataOutputStream(s.getOutputStream()); dis = new DataInputStream(s.getInputStream()); new Thread(new SendThread()).start(); // dos.writeUTF("Hello,i find u!"); } catch (UnknownHostException e) { System.out.println("UnknownHostException"); e.printStackTrace(); } catch (IOException e) { System.out.println("IOException"); e.printStackTrace(); }finally{ //关闭啥尼... } } /** * 额不会傻等着tfText(TextField tfText的监听器类) */ class TFListener implements ActionListener{ private String str; @Override public void actionPerformed(ActionEvent e) { str = tfText.getText().trim(); tfText.setText(""); try { dos.writeUTF(str); } catch (IOException e1) { System.out.println("IOException"); e1.printStackTrace(); } } } /** * 客户端接收消息的线程呦... * */ class SendThread implements Runnable{ private String str; private boolean iConnect = false; public void run(){ iConnect = true; recMsg(); } /** * 消息,看招,哪里跑...(客户端接收消息的实现) * @throws IOException */ public void recMsg() { try { while(iConnect){ str = dis.readUTF(); taContent.setText(str); } } catch (IOException e) { e.printStackTrace(); } } } } 服务器端 import java.io.*; import java.net.*; import java.util.*; public class HeartServer { /* * 成员变量闪亮登场 */ List<ClientThread> clients = new ArrayList<ClientThread>(); /** * 这系入口啊,向这里看齐... * @param args */ public static void main(String[] args) { new HeartServer().start(); } /** * 启动服务器中... * */ public void start(){ try { boolean iConnect = false; ServerSocket ss = new ServerSocket(1720); iConnect = true; while(iConnect){ System.out.println("绑定服务器端口成功!"); Socket s = ss.accept(); ClientThread currentClient = new ClientThread(s);//创建线程引用 System.out.println("发现客户端!"); clients.add(currentClient);//把当前客户端加入集合 new Thread(currentClient).start(); System.out.println("客户端进程已经启动!"); } } catch (IOException e) { System.out.println("IOException"); e.printStackTrace(); } } /** * 给每个客户端留个家(客户端的进程) * */ class ClientThread implements Runnable { /* * 成员变量又来啦... */ private Socket s; private DataInputStream dis; private DataOutputStream dos; private String str; private boolean iConnect = false; /** * 小构一下 */ ClientThread(Socket s){ this.s = s; iConnect = true; } public void run(){ System.out.println("run方法启动了!"); try { while(iConnect){ System.out.println("RUN方法中的while循环启动,正在等待客户端的发送消息..."); dis = new DataInputStream(s.getInputStream()); str = dis.readUTF(); System.out.println(str); for(int i=0; i<clients.size(); i++){ System.out.println("转发消息中..."+i); ClientThread c = clients.get(i); c.sendMsg(str); } } } catch (IOException e) { e.printStackTrace(); } } /** * 转发消息,我做主... * 将送至服务器的消息发送给每个连接到的客户端 */ public void sendMsg(String str){ try { System.out.println("创建输出管道!"); dos = new DataOutputStream(this.s.getOutputStream()); System.out.println("正在向客户端写消息!"); dos.writeUTF(str); System.out.println("正在向客户端写消息成功!"); } catch (IOException e) { e.printStackTrace(); } } } }
试试其它关键字
客户端
聊天程序
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
亭
贡献的其它代码
(
23
)
.
Java util.Date 转换成 sql.Date
.
生日贺卡
.
查询域名的 MX 记录
.
字符串循环匹配
.
获取网上指定id的按钮的名字
.
兼容各大主流浏览器的旋转导航
.
动态改变表格的边框宽度
.
为数字在左边自动补0的函数
.
隐藏状态栏
.
utf8到unicode
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3