简单局域网聊天 JAVA开发 我这里想写一个简单的局域网开发软件!当我写到服务器的时候我就郁闷了,建一个HashMap集合用来存客户端的Socket,我们服务端应该是要不停的去接受客户端的信息,和把客户端的信息发送出去……写到这里停笔了,不知道 怎么向 下写了,就是这里的不停的发,和接, ……那位大哥大姐,能一下小弟,客户端的自己可以搞定,那个没有服务器端复杂…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为每个连接的socket都建立一条接收消息的线程 到我博客看看就知道怎么写了很easy的。。 思路要清晰。 首先要清楚服务器端是做什么的,很明显在现在的情况下服务器端得做两件事:1、循环等待接收客户端的连接。2、接收来自各个客户端发的消息,再把它们转发出去。很明显,这不是单线程可以完成的工作,所以自然而然就要采用多线程。主线程:while(true){ //或者用一个boolean变量控制,看需求 Socket s = ss.accept() …… Client c = new Client(); list.add(c) }主线程每接收到一个客户端的连接,就将该客户端加到自己的集合中分线程:接收来自客户端的消息包,然后将它转发给自己集合中的所有其它客户端 DatagramSocket ds = new DatagramSocket(s); //采用UDP协议接收消息 DatagramPacket dp = new DatagtamPacket(ds); while(true) { //这里同上 dp.receive() //这里注意接收的时候的一些细节 …… //设置目标地址,转发 for(Client c : list) { dp.send() }大体思路就是这样,不过还有些细节是需要注意的,比如说怎么判断是不是自己发出的包之类的。总之多想多思考,把流程画出来再写代码,会轻松许多。最后,加油吧。 因为没用IDE写的,所以有些语法什么的肯定不是这样的,但相信你通过查询API肯定能做出来的。 同问: "服务端应该是要不停的去接受客户端的信息,和把客户端的信息发送出去……"1。服务器一般只是接受消息,不会主动发送消息吧。 2。如如果服务器可以主动发消息连接到客户端(用客户端的IP),那为什么客户端之间不直接P2P 的通信,而要经过服务器转发呢?服务器的负载不是很大?3。我的客户端在手机上运行呢? 服务器能发送消息给手机吗?还是手机定时发消息给服务器获取消息留言? 同意4楼,我就是用这种方式来做lz的这个项目。每次客户端所发的数据都是一个线程,而服务器端用循环来创建socket就行了。 我做过这种东西,我的第一桶金就是靠它挣的呢。你的思路和我当初一样,补充一点就好:当你新获取了个socket连接请求的时候,就新开一个线程,专门监听从这个socket传来的消息,做出响应。 楼主,你要的东西,或许这里有http://download.csdn.net/source/2057824 “每次客户端所发的数据都是一个线程,而服务器端用循环来创建socket就行了??”客户端也要新建 ServerSocket来监听服务器的消息吗? 客户端也成服务器了? 贴一个完整的代码供参考,1.支持都客户端,2.消息通过服务器中转。http://mybeautiful.javaeye.com/blog/659317当然界面不怎么友好,作为聊天程序的原型,可以参考下。 有所误解, 是服务端用一个循环,等待客户端的连接,而每收到一个客户端连接,则产生一个socket,并生成一个新线程专门负责和这个客户端通信。 synchronized & sleep 如何查看ThreadDump文件 javamail收新浪邮件问题 ftl文件导入jsp文件中文乱码问题 对于MVC模式,深度讨论其View层细化问题,使用组件开发模式,来简化用户需求!(大家得工作可以不用那么累了,都来看看!) 关于sting的使用, 加密算法之MD5算法(引用) 在接口声明一个抽象方法,为什么,请大家讨论一下 为什么JTABLE的没有内容?紧急求助(如能尽快解决可开贴加送分) 关于文本输入时最大长度限制 来人啊`````help me!!!!!! 修改表约束的小问题
首先要清楚服务器端是做什么的,很明显在现在的情况下服务器端得做两件事:
1、循环等待接收客户端的连接。
2、接收来自各个客户端发的消息,再把它们转发出去。很明显,这不是单线程可以完成的工作,所以自然而然就要采用多线程。
主线程:while(true){ //或者用一个boolean变量控制,看需求
Socket s = ss.accept()
……
Client c = new Client();
list.add(c)
}
主线程每接收到一个客户端的连接,就将该客户端加到自己的集合中分线程:接收来自客户端的消息包,然后将它转发给自己集合中的所有其它客户端
DatagramSocket ds = new DatagramSocket(s); //采用UDP协议接收消息
DatagramPacket dp = new DatagtamPacket(ds);
while(true) { //这里同上
dp.receive() //这里注意接收的时候的一些细节
…… //设置目标地址,转发
for(Client c : list) {
dp.send()
}
大体思路就是这样,不过还有些细节是需要注意的,比如说怎么判断是不是自己发出的包之类的。
总之多想多思考,把流程画出来再写代码,会轻松许多。最后,加油吧。
1。服务器一般只是接受消息,不会主动发送消息吧。
2。如如果服务器可以主动发消息连接到客户端(用客户端的IP),那为什么客户端之间不直接P2P 的通信,而要经过服务器转发呢?服务器的负载不是很大?
3。我的客户端在手机上运行呢? 服务器能发送消息给手机吗?还是手机定时发消息给服务器获取消息留言?
每次客户端所发的数据都是一个线程,而服务器端用循环来创建socket就行了。
我做过这种东西,我的第一桶金就是靠它挣的呢。你的思路和我当初一样,补充一点就好:当你新获取了个socket连接请求的时候,就新开一个线程,专门监听从这个socket传来的消息,做出响应。
http://download.csdn.net/source/2057824
1.支持都客户端,
2.消息通过服务器中转。http://mybeautiful.javaeye.com/blog/659317当然界面不怎么友好,作为聊天程序的原型,可以参考下。
有所误解, 是服务端用一个循环,等待客户端的连接,而每收到一个客户端连接,则产生一个socket,并生成一个新线程专门负责和这个客户端通信。