java可视化多人群聊,java 网络编程-TCP-多人群聊(自问自答)

服务器:

public class Chat {

public static void main(String[]args) throws IOException

{

System.out.println("服务器启动中...");

//创建服务器

ServerSocket server=new ServerSocket(9999);

//阻塞式等待连接,当客户端Socket创建好以后才开启

while(true)

{

Socket client=server.accept();

System.out.println("一个客户端建立了连接");

new Thread(()->{

DataInputStream dis = null;

DataOutputStream dos = null;

try {

dis = new DataInputStream(client.getInputStream());

dos = new DataOutputStream(client.getOutputStream());

} catch (IOException e1) {

e1.printStackTrace();

}

boolean flag=true;

while(flag) {

String msg = null;

try {

msg = dis.readUTF();

dos.writeUTF(msg);

dos.flush();

} catch (IOException e) {

//当断掉客户端连接时,不用循环再读取数据

flag=false;

}

//返回消息

}

try {

if(null!=dos)

{

dos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

try {

if(null!=dis)

{

dis.close();

}

} catch (IOException e) {

e.printStackTrace();

}

try {

if(null!=client)

{

client.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}).start();

}

}

}

客户端:

public class Client {

public static void main(String[]args) throws UnknownHostException, IOException

{

System.out.println("客户端启动中...");

Socket client=new Socket("localhost",9999);

//客户端发送消息

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

DataOutputStream dos=new DataOutputStream(client.getOutputStream());

DataInputStream dis =new DataInputStream(client.getInputStream());

boolean flag=true;

while(flag) {

System.out.println("请输入消息");

String msg=br.readLine();

dos.writeUTF(msg);

dos.flush();

//获取消息

msg=dis.readUTF();

System.out.println(msg);

}

dos.close();

dis.close();

client.close();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语------------单词复数形式的规律

1、名词由单数变复数的基本方法如下: ①在单数名词词尾加s。如:map → maps,boy→ boys,horse→ horses, table→ tables. ②s,o,x ,sh,ch结尾的词加es.如:class→classes, box→boxes, hero→heroes, dish→dishes, bench→benches. [注]&am…

ad从2003升级到2008总结

一、升级前要在2003域控运行adprep命令来扩展2003森林架构和域架构 (adprep命令在2008 r2安装光盘的support\adprep目录。需要将其复制到2003域控中) 源2003 server为64位:adprep.exe 源2003 server为32位:adprep32.exe 转载于:h…

php 只读变量,PHP:类中的静态Readonly属性

直接回答您的问题:不,您不能将常规属性标记为只读.如果你想设置基本类型(数组除外),那将永远不会改变,你应该使用常量const QWE 666;这对于对象和数组不起作用.我看到两个(让我们说)“解决方案”>使用Getterprivate $qwe;public function getQwe() { return $th…

在Xcode6中搭建Python开发环境

http://jingyan.baidu.com/article/f71d60379c73001ab741d14e.html 对于使用Mac电脑,刚入门Python的同学,一定很好奇是不是可以使用Xcode这款IDE工具集成学习Python语言,答案是Yes!网络中有很多使用Xcode5搭建的帖子,现…

c++类模板及参数类型的运行时判断

/*C类模板及参数类型的运行时判断(typeid) */#include <stdio.h> #include <typeinfo> #include <vector> using namespace std;template<class T> class Exercise {public:typedef T Type;typedef vector < Type > VT;Exercise(int n);void Dis…

php redis 删除元素,redisTemplate.delete()不能删除元素

最近在学习redis&#xff0c;使用spring-data-redis的RedisTemplate.delete()方法删除时&#xff0c;添加是成功的&#xff0c;但是不能删除。代码如下public abstract class AbstractBaseRedisDao {Autowiredprotected RedisTemplate redisTemplate;// public void setRedisTe…

设计模式心得:三——命令模式

继续设计模式心得体验——命令模式。 命令模式&#xff1a; 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 一般在命令模式中有三个元素&#xff0c;invoker、command、…

弱水三千 之 统计独立性、统计相关性辨析

序 在随机信号分析中&#xff0c;存在这样一个概念群&#xff1a;不相关、正交、统计独立。 当两个随机过程保持统计独立时&#xff0c;它们必然不相关&#xff1b;但反过来则不一定成立&#xff0c;即不相关的两个随机过程不一定能保持统计独立&#xff0c;唯有高斯过程才是个…

React开发(185):ant design table控制居中和宽度

{ title: 冻结金额, type: price, dataIndex: frozenAmount, align: center, width: 80 },{ title: 钱包状态, dataIndex: statusName, align: center, width: 80 },{ title: 所属商户, dataIndex: platformMerchantName, align: center, width: 80 },

[python] list元素按关键字相加减

python list中的元素按关键字相加或相减&#xff1a; # codingutf-8# 两个list按关键字相加或相减 def ListAdd(list1, list2, bAdd True):if bAdd False:list2 [(k, -v) for (k, v) in list2]d {}list0 list1 list2for (k, v) in list0:d.setdefault(k, 0) # 设置字典元…

Cisco 6509交换机两次更换sup720引擎的过程

1 更换原因 用户的一台Cisco6509交换机&#xff0c;单sup720引擎&#xff0c;使用了一年多的 时间。最近不知道为什么&#xff0c;引擎上外置CF卡的插槽&#xff0c;变形了&#xff0c;无法插入CF卡&#xff0c;只能开个case&#xff0c;作RMA。 2 第一次更换 …

LTRIM、RTRIM和TRIM在ORACLE中的用法:

From: http://www.cnblogs.com/gsk99/archive/2011/04/25/2027359.html LTRIM、RTRIM和TRIM在ORACLE中的用法&#xff1a; 1、LTRIM(C1,C2) 其中C1和C2都可以字符串&#xff0c;例如C1是Miss Liu&#xff0c;C2MisL等等。这是第一个和SQL SERVER不一样的地方。如果记得不错的话…

React开发(186):react 父调用子组件的方法

<BaseTableSearchsearchParams{baseSearchParams}onSearch{this.handleSearch}onRef{(node) > (this.searchRef node)}highSearch{true}/>

php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)

本篇文章给大家带来的内容是关于Python中lambda表达式的简单介绍(附示例)&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。一&#xff1a;匿名函数的定义lambda parameter_list: expression二&#xff1a;三元表达式条件为真时…

编程个人教训

Matlab 1、生成数据时&#xff0c;多重循环&#xff0c;最起码要把最里面的循环跑一遍&#xff0c;看看生成的图片&#xff0c;和label有没错。确定一下&#xff0c;然后再跑整个程序。 2、跑for循环&#xff0c;卡死在某一个数据上。可以把这个数据单独运行下看看结果 3、生成…

linux命令行快捷键

2019独角兽企业重金招聘Python工程师标准>>> 转自&#xff1a;http://os.chinaitzhe.com/linux/2008-01/119926636930912.html history 显示命令历史列表 ↑(Ctrl p) 显示上一条命令 ↓(Ctrl n) 显示下一条命令 !num 执行命令历史列表的第num条命令 !! 执行上一条…

php css布局技巧,最全的CSS开发常用技巧

css(层叠样式表)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页&#xff0c;还可以配合各种脚本语言动态地对网页各元素进行格式化。CSS 能够对网页中元素位置的排版进行像素级精确控制&…

守护(后台)进程的创建

/*功能&#xff1a;守护进程的创建后台进程的创建思想&#xff1a;首先父进程创建一个子进程&#xff0c;然后子进程杀死父进程。信号处理所有的工作由子进程来处理。 */ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <st…

Lucene-3.0.0配置

Lucene-3.0.0配置2009-12-02 21:38一、Lucene开发环境配置step1.Lucene开发包下载step2.Java开发环境配置step3.Tomcat安装step4.Lucene开发环境配置解压下载的lucene-3.0.0.zip&#xff0c;可以看到lucene-core-3.0.0.jar和lucene-demos-3.0.0.jar这两个文件,将其解压(建议放在…