`
zuozhimin
  • 浏览: 5653 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

简单的聊天室实现

阅读更多
    我们在创建聊天室的时候,主要都是运用java.net包下面的类;
     创建聊天室需要了解TCP/IP协议方面的内容,我推荐几本书,大家可以参考,TCP/IP详解卷一、卷二、卷三版三本;
     现在我们用的只是最基础的,大家应该都知道我们IP地址吧,其中端口号了解吗?我给大家打个比方:我现在要邮寄一个东西到你家,我除了要知道你家是哪个城市哪条街哪栋房子外,我还必须要知道你是那栋房子的哪间房,只有这样我才能把东西准确的送到你门口;我们的IP地址就是相比于我们所处的城市街道和哪一栋,这样根据IP地址我们找到了相对应的电脑,但是每台电脑都有很多程序,信息怎么知道要找到哪个程序呢,这就要靠端口,我们电脑里面的每个程序都有一个端口号,就相当于一栋房子有很多房间,其中端口号就相当于房间号;根据端口号我们的信息才能准确的发送到相应的程序;
      现在我们要创建一个聊天室就必须先创建一个服务器,这个服务器以前是不存在我们电脑上就不存在端口号,所以我们就必须先赋予服务器一个端口号,我们要新建的端口号必须是我们电脑上没有用过的端口号,不然就会报错;我们电脑现在启动了哪些端口我们可以在cmd中输入netstat -an这个命令符来查看;
     下面就是我们创建一个服务器的代码:
	/**
	 * 实现信息传输的方法
	 */
	public void setUpServer(int port){
		try {
			//创建绑定在指定端口上的服务器对象,即服务器套接字(拥有一个手机,但没开机,不能通信)
			java.net.ServerSocket server = new java.net.ServerSocket(port);
			System.out.println("服务器创建成功!端口为"+port+"!");
			//获取客户端套接字(手机开机,等待别人打电话过来,现在处于待机状态)
			while(true){
				java.net.Socket socket = server.accept();
				System.out.println("客户机与服务器连接成功!");
				//创建输入、输出流对象;套接字获取的输入输出流都是输入输出的抽象类类型
				java.io.InputStream is = socket.getInputStream();
				java.io.OutputStream os = socket.getOutputStream();
				//创建要发出的字符串
				String s="你好!!我是某某某!!";
				byte[] string = s.getBytes();//字符串转化为字节放入数组
				os.write(string);
				//强制输出,关闭流
				os.flush();
				socket.close();//半闭与客户机连接
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

    这样我们就建立了最简单的聊天室,我们启动服务器后只需要在cmd中输入命令telnet localhost port(port是我们传入的端口号),这样我们就能收到服务器发来的一句话“你好!!我是某某某!!”;
     但是我们这样连接后看到,只要我们一连接上收到数据就断开了,我们还是无法进行聊天,我需要对以上代码进行扩展:
                                   int in=0;
				while(in!=13){
					in=is.read();
					System.out.println("读到的一个是:"+in);
				}
				System.out.println("客户按了回车键,并退出"+in);
				System.out.println("服务器处在在等待连接中...");
				os.close();

我们可以把上面这段代码添加到前面的那段代码的socket.close()的前面,这样我们在客户机上输入数据,服务器上都能收到,只是显示的是相应的ASCALL码,我们如果要显示正常字符,我们只要把他转化为字符即可;
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics