首先,实现一个最简单的网络聊天室,必备两个设备——服务器和多个客户端。服务器可以是我们自己的电脑, 而客户端我们可以用cmd来模拟。
于是我们分四步来实现:
一: 创建服务器
java.net.ServerSocket server = new java.net.ServerSocket(10101);//10101未连接端口号
(参考类的介绍————)
二:接收连接到了服务器的客户端
Socket socket = server.accept();//发现一个客户端
三: 接下来的操作就是对输出和输入流的操作了————因为一个客户端就可以看做是一个流的对象,我们可以接收客户端里的输入,也可以从服务器想客户端输出消息。
详细内容见代码:——
package 聊天室01; import java.net.Socket; import java.util.Map; public class Severs { //使用一个静态的map来保存客户端号和客户端 public static Map<Integer, Socket> map = new java.util.HashMap<Integer, Socket>(); public static void main(String[] args) { try { //创建服务器对象 java.net.ServerSocket server = new java.net.ServerSocket(10101); System.out.println("服务器已开启"); int num = 1;//定义变量来记录客户端的个数 while(true){//死循环的接受客户端连接 Socket socket = server.accept();//发现一个客户端 map.put(num, socket);//保存 Client_thread client = new Client_thread(socket , num);//立即开一个线程来处理 client.start();//开始线程 num++;//下一个客户端的编号加一 } }catch(Exception ex){ ex.printStackTrace(); } } }
为了接收多个客户端同时,我果断开启了多线程来实现客户端的
package 聊天室01; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Client_thread extends Thread{ private Socket socket;//一个客户端 private int num;//记录当前的客户端编号 Client_thread(Socket socket , int num){ this.socket = socket; this.num = num; } public void run() { try {//向服务器直接输出消息 System.out.println("客戶端 "+num+" : "+socket.getLocalSocketAddress().toString()+"已连接"); OutputStream output = socket.getOutputStream();//获得向当前客户端输出的流 output.write(("欢迎 欢迎 \r\n").getBytes());//先把字符串转换为字符数组 然后以字节流输出到客户端 output.flush();//强制输出结束 // output.close(); //获得当前客户端的输入流 InputStream input = socket.getInputStream(); while(true){//不断地接收客户端的输入 char ch = (char)input.read();//按字节接受输入 String str = "" + ch; while(ch!='\n'){ ch = (char)input.read(); str+=ch; } System.out.print("客户端 "+num+" 说: "+str);//输入到服务器 for(int i=0 ; i<Severs.map.size() ; i++){//想其他的在线服务器发送消息 if(num != (i+1)){//除了自己 OutputStream output_temp = Severs.map.get(i+1).getOutputStream();//获得客户端输出的流 output_temp.write(str.getBytes());//先把字符串转换为字符数组 然后以字节流输出到客户端 output_temp.flush(); } } } }catch(Exception ex){ ex.printStackTrace(); } } }
四:运行代码 ,开启服务器。
打开cmd ,连接服务器 telnet 127.0.0.1 10101 中间的是本机IP 最后一个是我们本机服务器的端口
(注意:需要先打开telnet系统服务,默认是不打开的(控制面板—程序与功能—打开或关闭windows
功能然后选中telnet客户端))
相关推荐
利用delphi7下indy9的两个控件:TidTcpClient和TidTcpServer写的网络聊天室工具。需要将服务器端布置在公网上。也可以使用两个路由器,连接其中一个路由器的电脑可以当作服务器,在上面布置服务器端程序。客户端用...
这是一个基于 visual studio开发的在线聊天室,通过登录进入聊天室,可显示当前在线人数,发言人的姓名及内容
课程设计——简易网络聊天室。 C++基于MFC开发的UDP网络聊天室。
是基于MFC的网络聊天室,用CSocket类实现; 源码,希望对大家有用。
本程序主要实现基本网络聊天室,希望能给网络初学者一些帮助!
基于Java的聊天室是利用Eclipse开发包工具进行开发出的一款网络聊天室。这款聊天室是套接字通信开发采用c/s模式的聊天室程序。聊天室共分为服务器端和客户端两个部分,服务器端程序主要负责侦听客户端发来的消息,...
网络聊天室 MFC VC Socket编程 基于MFC异步套接字编程 调试通过 基本实现
系统具有目前聊天室的基本功能:包括支持多种头像,字色,语气选择,支持emote,支持私聊,支持在线聊友查找,支持分屏显示,支持用户定制自己的私人头像,支持脏话过滤,支持嘉宾聊天。屏蔽掉自己讨厌的人物,可以给...
C语言构建网络聊天室 利用C语言编写Windows应用程序有两种方式:一种是Windows C编程方式,另一种是Visual C++编程方式。...用Winsock构建一个网络聊天室,有两种基本的方式:数据报方式和流方式。
本软件是采用sun公司开发提供的java语言制作的,是基于C/S模型的网上聊天室。这个系统分为两个部分,服务端和客户端。服务端的工作主要是来监听和接收来自客户端的请求,然后处理客户端发来的消息,并通知客户端。...
一.实训目的 1、使用Java技术完成聊天室系统,深入学习使用Java...程序实现了聊天室的基本功能,其中有: 1.启动服务器。 2.启动登陆界面。 3.进入客户端界面。 4.发送信息。 5.离开客户端界面。 6.关闭服务器
2.利用VC++6进行较复杂的网络编程,完成网络聊天室的设计及编写; 三、实验(设计)仪器设备和材料 1.计算机及操作系统:PC机,Windows; 2.网络环境:可以访问互联网; 四、 TCP/IP程序设计基础 基于...
现在随着网络聊天室的发展,其功能已经超越了普通的聊天活动,如新浪聊天室定期邀请当今社会知名人士、专家、业界领袖、优秀人物、政府部门领导等开展一些社会活动、宣传和讨论等多种形式的活动。网络聊天室也是网络...
刚接触Java中的GUI编程和网络编程时觉得很有意思,所以就结合了这两个方面并结合IO、多线程的知识,做了一个GUI版的聊天室。 这个聊天室是两端开发,服务器端和客户端 **服务器端功能:** 1. 开启和关闭服务器 2. 总...
(1)网上聊天使人们之间的通信变得越来越方便,快捷,准确,及时。 (2)还可以在网上认识新的朋友,交流自己的一些想法。 三 系统的总体分析与设计 分析该聊天室系统,制订整个系统框架,主要要求及特点如下: 1....
使用Qt实现的网络聊天室,此网络聊天室的基本功能包括TCP并发服务器、登录界面、聊天室的基本功能
基于Qt的网络聊天室 易于理解和实现 C++的基本语法和网络套接字
网络聊天室小程序,网络聊天室初步建立。基本原程序,利用winsock控件实现。
基于Linux socket函数及系统函数编写的小型网络聊天室,实现了单聊,多聊,群聊的基本功能,及显示在线人数,代码本人写的,可直接运行,是学习网络编程和系统编程的好的代码。