Android--使用socket通讯建立网络聊天室2

上一节的当前的服务器只有像客户端发送数据的功能,并没有从客户端读取数据的功能,我们这一节将进行改进:

新建一个ChatManager类:

package com.test.test;

import java.util.Vector;

public class ChatManager {
	//完成类的单例:
	private ChatManager(){}
		private static final ChatManager cm=new ChatManager();
		public static ChatManager getChatManager(){
			return cm;
		}
		//完成ChatSocket线程的管理:
	Vector<ChatSocket> vector=new  Vector<ChatSocket>();
	//为当前的集合添加一个新的ChatSocket对象:
	public void add(ChatSocket cs){
		vector.add(cs);
	}
	//某一个线程可以调用下面的函数像其他客户端发送信息
	public void publish(ChatSocket cs,String out){
		for (int i = 0; i < vector.size(); i++) {
			ChatSocket csChatSocket=vector.get(i);
			//判断用于当前发送的线程就不用再接收此条信息了
			if(!cs.equals(csChatSocket)){
				csChatSocket.out(out);
			}
		}
	}

}

修改其他类1:

package com.test.test;

public class MyServerSocket {

	public static void main(String[] args) {
		new ServerListener().start();

	}

}

2:

package com.test.test;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;

public class ServerListener extends Thread {

	public void run() {
		try {
			ServerSocket serverSocket=new ServerSocket(12345);
			while(true){
				Socket socket=serverSocket.accept();
				JOptionPane.showMessageDialog(null,"有客户端连接到了12345端口!");
				ChatSocket cs=new ChatSocket(socket);
				cs.start();
				ChatManager.getChatManager().add(cs);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

3.

package com.test.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ChatSocket extends Thread {
	Socket socket;
	public ChatSocket(Socket s){
		this.socket=s;
	}

	public void out(String out){
		try {
			socket.getOutputStream().write(out.getBytes("UTF-8"));
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public void run() {
		try {
			BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
			String line=null;

			while((line=br.readLine())!=null){
				ChatManager.getChatManager().publish(this, line);
			}
			br.close();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

类结构如下:

此时我们进行测试,打开三个终端,然后连接,然后输入内容,这样每一个客户端都能收到别人发送的信息:

时间: 2024-10-13 07:17:47

Android--使用socket通讯建立网络聊天室2的相关文章

Android--使用socket通讯建立网络聊天室1

首先建立服务器端程序: 1.MyServerSocket.java package com.test.test; public class MyServerSocket { public static void main(String[] args) { new ServerListener().start(); } } 2.ServerListener.java用于监听端口连接 package com.test.test; import java.io.IOException; import

Socket编程(简易聊天室客户端/服务器编写、CocoaAsyncSocket)

Socket编程(简易聊天室客户端/服务器编写.CocoaAsyncSocket) 一.Socket 1.1 Socket简介 Socket就是为网络服务提供的一种机制.网络通信其实就是Socket间的通信,通信的两端都是Socket,数据在两个Socket间通过IO传输. 在Web服务大行其道的今天,调用Web服务的代价是高昂的,尤其是仅仅是抓取少量数据的时候尤其如此.而使用Socket,可以只传送数据本身而不用进行XML封装,大大降低数据传输的开销.Socket允许使用长连接,允许应用程序运

基于linux的TCP网络聊天室设计与实现

利用Linux实现基于TCP模式的网络聊天程序 主要完成的两大组成部分为:服务器和客户端. 服务器程序主要负责监听客户端发来的消息. 客户端需要登录到服务器端才可以实现正常的聊天功能.该程序是利用进程以及共享内存来实现群发送消息的. 以下简单分析一下服务器端和客户端两个方面所要完成的任务. 服务器的主要功能如下: 在特定的端口上进行监听,等待客户端的连接. 用户可以配置服务器端的监听端口. 向连接的客户端发送登录成功信息. 向已经连接到服务器的客户端的用户发送系统消息. 使用TCP多线程并发服务

网络聊天室

1网络聊天室项目描写叙述 1.1功能描写叙述 MyQQv1採用C/S模式,构建网络聊天室,详细实现功能: A.能显示在线用户列表 B.能在聊天室里进行群聊天 C.能指定用户进行私聊 D.某用户下线.其它用户能接到提示 1.2所需技术 MFC,Socket套接字,TCP/IP协议.动态数组,CString字符串拼接与拆分 2网络聊天室执行流程图 2.1server执行流程图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fo

基于java网络聊天室---前言

很久之前做的一个东西,现在拿出来整理一下放在自己的博客中! 一. 设计目的 随着人互联网的发展,人和人之间的沟通方式也越来越便捷和多样化,在线聊天工具已经成为人们生活中够通不可缺少的部分,在学习完 java网络编程课程,如果能开发一款属于自己的聊天工具,和好友进行私密对话,则是一件令人兴奋的事.同时,安全可靠的TCP这两种 通信协议,是非常重要的内容,值得研究. 二. 设计内容 本聊天室程序基于C/S模式,聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登陆

使用socket.io打造公共聊天室

最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室.当然,我毫不犹豫选择了node来写,node有一个名叫socket.io的框架已经很完善的封装了socket相关API,所以无论是学习还是使用都是非常容易上手的,在这里强烈推荐!demo已经做好并放到我的个人网站了,大家可以试试,挺好玩的. 进去试试 ->   http://www.yinxiang

基于java网络聊天室--客户端

ChatClient.java 包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加时间监听与事件处理.该类定义了Connect()与DisConnect()方法实现与客户端的连接与断开连接.当登陆到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还定义了SendMessaga()方法来其他用户发送带有表情的消息或悄悄话. 1 /* 2 * To change this license header, choose License Headers

node+express+socket.io制作一个聊天室功能

首先是下载包: npm install express npm install socket.io 建立文件: 服务器端代码:server.js 1 var http=require("http"); 2 var express=require("express"); 3 var sio=require("socket.io"); 4 5 var app=express(); 6 app.use(express.static(__dirname+

【Java】Socket+多线程实现控制台聊天室

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827212.html 聊天室程序的结构图: 架构解释: Server服务器相当于一个中转站,Client客户端程序传送信息到服务器,服务器再把信息分发到其他客户端上,实现即时通信. 所需技术: 1:数据传输. 服务器与客户端之间的信息传递,都通过数据通道实现,有一个客户端连接到服务器,就有一条数据通道架设于该客户端和服务器之间. 这条数据通道通过Socket来实现:每个客户端通过一个socket与服务器建立