java38.Socket通信------使用ServerSocket建立聊天服务器---2
来源:互联网 发布:iphone7和mac照片同步 编辑:程序博客网 时间:2024/05/20 07:20
在上一个博客代码中进行修改:
1.MyServerSocket类
package com.jikexueyuan.testmyserversocket.main;public class MyServerSocket { public static void main(String[] args) { new ServerListner().start(); }}
2.ServerListner类
package com.jikexueyuan.testmyserversocket.main;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JOptionPane;public class ServerListner extends Thread { public void run() { try { // 1-65535 ServerSocket serverSocket = new ServerSocket(12345);// 服务器启动监听了12345 while (true) { Socket socket = serverSocket.accept();// 线程阻塞---等待客户端连接12345端口 // 建立连接 JOptionPane.showMessageDialog(null, "有客户端链接到了本机的12345端口"); // 将socket传递给新的线程 ChatSocket cs = new ChatSocket(socket); cs.start(); ChatManager.getChatManager().add(cs); } } catch (IOException e) { e.printStackTrace(); } }}
3.ChatSocket类
package com.jikexueyuan.testmyserversocket.main;import java.io.BufferedReader;import java.io.IOException;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;// line:服务器从客户端读取的数据 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(); } }}
4.ChatManager类
package com.jikexueyuan.testmyserversocket.main;import java.util.Vector;public class ChatManager { // 每个聊天服务器只有一个ChatManager,所以要单例化处理 //单例化:通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的。 // 1.类的构造方法要变成private类型,以限制产生多个对象 private ChatManager() { } private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager() { return cm; } Vector<ChatSocket> vector = new Vector<ChatSocket>(); // 为当前集合添加一个ChatSocket对象 public void add(ChatSocket cs) { vector.add(cs); } // 其中某个ChatSocket线程,通过调用publish函数向其他所有客户端发送信息 public void publish(ChatSocket cs, String out) {// out为要发送的信息 for (int i = 0; i < vector.size(); i++) { ChatSocket csChatSocket = vector.get(i); if (!cs.equals(csChatSocket)) {// 如果当前对象不是发送消息的对象, csChatSocket.out(out);//则当前客户端显示出来消息 } } }}
5.运行结果:
1.打开两个cmd,分别输入如图指令
2.两个cmd客户端连接成功
3.只要在一个窗口输入数据,另外一个窗口就会接收到
1 0
- java38.Socket通信------使用ServerSocket建立聊天服务器---2
- java37.Socket通信------使用ServerSocket建立聊天服务器---1
- Socket 基础解析使用ServerSocket建立聊天服务器
- Socket介绍及使用ServerSocket建立聊天服务器
- 使用ServerSocket建立聊天服务器(一)
- 使用ServerSocket建立聊天服务器(二)
- java36.Socket通信------ServerSocket的建立与使用示例
- ServerSocket和Socket建立通信(客户端发送消息服务器接收输出)
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- ServerSocket和Socket建立通信(服务器和客户端循环接收发送)
- ServerSocket和Socket建立通信(客户端发送消息服务器接收并返回到客户端接收输出)
- ServerSocket和Socket建立通信(服务器和客户端循环接收发送)
- java socket/serversocket/thread 服务器客户端任意聊天
- 使用ServerSocket、Socket创建一个简单的服务聊天程序
- 浅谈java中的ServerSocket和Socket的通信原理实现聊天及多人聊天
- Java socket通信已经被封装好了主要使用两个类ServerSocket 和Socket (2)
- ServerSocket服务器通信
- ServerSocket 多人聊天服务器
- Swift - 纯代码实现页面segue跳转,以及参数传递
- 利用red5搭建一个简单的流媒体直播系统
- poj3660 Cow Contest
- 如何用IDE调试MR任务(一)(2016-01)
- c语言:求两个数中的最大值(双分支结构)
- java38.Socket通信------使用ServerSocket建立聊天服务器---2
- 解决vs2010中写vb代码时按'''不自动加入函数注释的问题
- LA-3026 Period(kmp应用)
- Android中EditText的字数统计
- Android调用微信登陆、分享、支付
- Android系统之G-sersor调试
- [读书笔记]JVM的垃圾收集算法
- android framework初步理解
- tomcat端口被占用问题解决