Android--使用socket通讯建立网络聊天室2
来源:互联网 发布:ubuntu fcitx没输入法 编辑:程序博客网 时间:2024/05/16 13:06
上一节的当前的服务器只有像客户端发送数据的功能,并没有从客户端读取数据的功能,我们这一节将进行改进:
新建一个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 blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
类结构如下:
此时我们进行测试,打开三个终端,然后连接,然后输入内容,这样每一个客户端都能收到别人发送的信息:
1 0
- Android--使用socket通讯建立网络聊天室2
- Android--使用socket通讯建立网络聊天室1
- [Unity][PHOTON][UNET][SOCKET][Android]PC-Android建立聊天室ChatRoom交互通讯
- android 4.0网络编程之socket聊天室
- iPhone 网络编程:使用stream建立通讯
- SOCKET IO 网络聊天室
- socket.io 网络聊天室
- Linux socket网络编程之聊天室(三):select异步通讯实现
- Linux socket网络编程之聊天室(三):select异步通讯实现
- Linux socket网络编程之聊天室(三):select异步通讯实现
- linux系统下用socket通讯编写网络聊天室(C语言)
- 使用Android网络编程实现简易聊天室
- 使用Android网络编程实现简易聊天室
- 使用Android网络编程实现简易聊天室
- 使用Android网络编程实现简易聊天室
- 使用Android网络编程实现简易聊天室
- Android网络编程之Socket通信实现简单聊天室
- Android网络通信篇:Socket TCP(简易聊天室)
- android程序适应各种分辨率
- Stanford机器学习---第九讲. 聚类
- 【c语言】求两个整数之和
- 电影票房
- Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制
- Android--使用socket通讯建立网络聊天室2
- RTP头结构解析
- Android 接收系统发送的广播,动态注册和静态注册
- 机器学习——深度学习(Deep Learning)
- EditText中光标位置问题
- 交换两个数组的元素使之总和的差值最小
- android屏幕适配详解
- 利用DSHOW中的VMR9 filter 将视频渲染成纹理 供D3D使用
- 【c语言】求两个整数中的较大者