Java 中使用serversocket通信
1. 创建一个Java项目 TestMyServerSocket.
2. 创建一个包 com.weloglog.main
3. 创建一些使用到的类
程序启动类 MyServerSccket : 用来启动程序, 启动之后创建一个进程, 用来监视本机当前端口
监视本机端口进程类 ServerListener : 用来监视本地端口, 当有连接本机端口时会生成一个聊天类 ChatSocket 并把这个聊天类添加到 聊天管理类(单例类)中 ChatManager
聊天类 ChatSocket : 用来发送消息给所以聊天窗口(除过自己)
聊天管理类 ChatManager : 用来收集管理所有聊天窗口
4. 以下为所有类代码:
MyServerSccket.java
package com.weloglog.main; public class MyServerSccket { public static void main(String[] args) {
new ServerListener().start();
} }
ServerListener.java
package com.weloglog.main; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; import javax.swing.JOptionPane; public class ServerListener extends Thread { int port = 12345;
@Override
public void run() {
try {
//端口 : 1 - 65535
ServerSocket serverSocket = new ServerSocket(port);
while (true) {
//阻塞的方法
Socket socket = serverSocket.accept();
//建立连接
JOptionPane.showMessageDialog(null, "有客户端连接到本机12345端口");
//将Socket传递给线程
ChatSocket cs = new ChatSocket(socket);
cs.start();
ChatManager.getChatManager().add(cs);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ChatSocket.java
package com.weloglog.main; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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"));
System.out.println(out);
} catch (IOException e) {
e.printStackTrace();
}
} @Override
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);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ChatManager.java
package com.weloglog.main; import java.util.Vector; public class ChatManager {
//单例类
private ChatManager(){}
private static final ChatManager cm = new ChatManager();
public static ChatManager getChatManager(){
return cm;
} //存放聊天进程的容器
Vector<ChatSocket> vector = new Vector<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);
}
}
}
}
Java 中使用serversocket通信的更多相关文章
- java中有关socket通信的学习笔记
最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...
- Java中的socket通信
socket又称套接字,应用程序通常通过"套接字"向网络发出请求或应答网络请求 建立过程:服务器监听-客户端发出请求-建立链接-通信 特点:1.基于tcp链接,数据传输有保障,2. ...
- Java中实现线程通信的三个方法的作用是什么?
Java提供了3个方法解决线程之间的通信问题,均是java.lang.Object类的方法,都只能在同步方法或者同步代码块中使用,否则会抛出异常. 方法名 作 用 final void wait() ...
- Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制
Java网络编程和NIO详解1:JAVA 中原生的 socket 通信机制 JAVA 中原生的 socket 通信机制 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.co ...
- HTTP协议报文、工作原理及Java中的HTTP通信技术详解
一.web及网络基础 1.HTTP的历史 1.1.HTTP的概念: HTTP(Hyper Text Transfer Protocol ...
- Java并发基础--线程通信
java中实现线程通信的四种方式 1.synchronized同步 多个线程之间可以借助synchronized关键字来进行间接通信,本质上是通过共享对象进行通信.如下: public class S ...
- 【转】Java学习:Java中的线程之线程间的通信
hello各位小伙伴 今天我们来搞一下 线程之间的通信 ( • ̀ω•́ )✧ 让线程按照我们的想法来执行 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: ...
- Mac OS中Java Servlet与Http通信
Java中一个Servlet其实就是一个类,用来扩展服务器的性能,服务器上驻留着可以通过“请求-响应”编程模型来访问的应用程序.Servlet可以对任何类型的请求产生响应,但通常只用来扩展Web服务器 ...
- java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)
CPU:10核 主频100MHz 1核 主频 3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...
随机推荐
- flutter中的生命周期函数
前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的时机做该做的事情,flutter中的State生命周期和android以及React Native的生命周期类似. 先看一张 ...
- Oracle 报错 ORA-03290的处置
MySql 的tuancate命令是直接truncate tableName,但在Oracle需要写成truncate table tableName,改正就好了. --END-- 2019.10.1 ...
- React Native 日常报错
在学习React.js 或 React Native 过程中,有时看着别人的框架或代码,但总是会出现错误,因为React或之中用到的一些包经常更新,有些代码或教程就显得过旧了. 一.日常报错 'con ...
- 生成 XML 文档时出错。
找来找去,在CSDN 里看到高手解答了. 原来 WebService 传递参数时,不能使用 DataTable 如果需要使用DataTable 那就要用 DataSet 包装起来. 如果担心数据太 ...
- leetcode94 不同的二叉搜索树
solution 1:**动态规划 class Solution { public: int numTrees(int n) { vector<int> g={1,1,2}; for(in ...
- Samrty技术的 初步了解
<span style="font-size:18px;">Smarty 技术的使用 <?php #smarty 测试 #引入smarty require_onc ...
- delphi ADOCONNECTION异常拦截
elphi ADOCONNECTION错误拦截错误框标题: Debugger Exception Notification内容: Project KJXX.exe raised excepti ...
- 搭建hadoop2.4.1
前期准备: 1.系统基本形况: ip hostname role server loginName 192.168.1.101 h1 NameNode,ResourceManager centos7_ ...
- web系统认证与鉴权中的一些问题
认证鉴权系统的初心: 空间管理: 1.他是谁? 他登陆了没有? 2.他要做什么? 2.1 他要使用什么功能? 他是否有这个功能的权限. 2.2 他要使用这个功能做什么操作? 他是否有这个功能的这个操作 ...
- 解读GitHub EntityComponentSystemSamples
出自Unity官方的ECS项目示例,该项目的第一次Commit是在2018年3月20号,距离现在一年半的时间,这期间ECS本身的生态在快速发展,稳定性也是逐步提升,期待在2020年的Unity版本中作 ...