socket通信
socket通信
一:socket基于Tcp连接,数据传输有保证
二:socket连接的建立过程:
1:服务器监听
2:客户端发出请求
3:建立连接
4:通信
三:一个简单的例子:服务器端每隔一段时间发一些信息
1:创建一个服务器端监听的线程
public class ServerListener extends Thread {
public void run() {
try {
//服务器端的socket
ServerSocket serversocket=new ServerSocket();
while(true){
//收到客户端的socket,
Socket socket=serversocket.accept();
//建立连接,弹窗
JOptionPane.showMessageDialog(null, "有客户端连接到本地的22345端口"); //将socket传递到新的线程(socket通信的线程)
new ChatSocket(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
通信线程ChatSocket 类继承Thread,重写run()方法:
public class ChatSocket extends Thread { Socket socket; public ChatSocket(Socket socket) {
super();
this.socket = socket;
} public void out(String out){
try {
socket.getOutputStream().write(out.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} public void run() {
int count=;
while(true){
count++;
out("loop:"+count);
try {
sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} }
新建一个程序测试类
public class MyServerSocket { /**在cmd里面是输入telent localhost 22345就可建立连接
* @param args
*/
public static void main(String[] args) {
new ServerListener().start();
}
}
效果如下:
看到这里,可以知道可以同时进行多个客户端的连接
上面的实例只能是服务器发送消息给客户端,但是客户端不能发送消息,怎么办呢?
请看下面
二:多个客户端同时在线通信,一个客户端发送一条消息,然后全部的客户端都可以收到
这里要新建一个socket管理类,把所有的ChatSocket放在一起,用到了Vector<>,可增长的对象数组
public class ChatManager { public void ChatManger(){} private static final ChatManager cm=new ChatManager(); public static ChatManager getChatManager(){
return cm;
} //Vector 类可以实现可增长的对象数组
Vector<ChatSocket> vector=new Vector<ChatSocket>(); public void add(ChatSocket cs){
vector.add(cs);
} //发送信息
public void publish(ChatSocket cs,String out){
for(int i=;i<vector.size();i++){
ChatSocket csChatSocket =vector.get(i);
if(!cs.equals(csChatSocket)){
csChatSocket.out(out);
}
}
}
}
ChatSocket代码完善
public class ChatSocket extends Thread {
Socket socket;
public ChatSocket(Socket socket) {
super();
this.socket = socket;
}
//写数据
public void out(String out){
try {
socket.getOutputStream().write(out.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} //当前服务器不断地 读取 客户端传来的数据,把接受的数据传到Vector<ChatSocket>集合
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);//this是当前线程
}
br.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }
ServerListener 类
public class ServerListener extends Thread { public void run() {
try {
//服务器端的socket
ServerSocket serversocket=new ServerSocket();
while(true){
//收到客户端的socket,
Socket socket=serversocket.accept();
//建立连接
JOptionPane.showMessageDialog(null, "有客户端连接到本地的22345端口"); //将socket传递到新的线程(socket通信的线程)
ChatSocket cs=new ChatSocket(socket);
cs.start();
ChatManager.getChatManager().add(cs);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试代码同上,
效果如下
socket通信的更多相关文章
- 我看不下去鸟。。。。Java和C#的socket通信真的简单吗?
这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...
- php简单实现socket通信
socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...
- Socket通信类
package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- Android之Socket通信、List加载更多、Spinner下拉列表
Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...
- .NET开源高性能Socket通信中间件Helios介绍及演示
一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
随机推荐
- SQL中循环和条件语句
.if语句使用示例: declare @a int begin print @a end else begin print 'no' end .while语句使用示例: declare @i int ...
- RBAC基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- javaScript判断浏览器类型
<script type="text/javascript"> function getBrowserInfo(){ var OsObject=navigator.us ...
- JAVA BigDecimal 小数点处理
1,保留两位小数 方法一:{ double c=3.154215; java.text.DecimalFormat myformat=new java.text.DecimalFormat(" ...
- ajax+php+mysql 实现点赞、局部刷新,每个IP只能对一篇文章点赞一次
主要流程: 点赞—>判断当前设备IP是否对当前文章有过点赞记录—>若有记录,弹出提示“已经赞过了”; 若无记录,当前文章点赞数+1,并在记录设备IP点赞记录的表中插入信息. 文章表 art ...
- php.ini 配置详解【转载】
[PHP]engine = On #是否启用PHP解析引擎zend.ze1_compatibility_mode = Off #是否在Last-Modified应答头中放置该PHP脚本的最后修改时 ...
- pygame学习笔记
pygame参考文档pdf版:pygame API html版 pygame API 石头剪子布的简单小游戏,待改进的地方,自适应大小.感兴趣的小伙伴可以依据get_surface()返回值(即当前窗 ...
- Swift - 代码创建NSLayoutConstraint布局
NSLayoutConstraint参数说明: /** * 创建约束 NSLayoutConstraint 参数 说明: * item 自己 * attribute * relatedBy 大于等于 ...
- R语言 入门知识--常用操作和例子
1 R的下载.安转 (转)R有很多的版本,支持目前主流的操作系统MAC.Linux和WINDOWS系列.因为我个人是在WINDOWS下用R的,所以在这里将只介绍WINDOWS下R的下载&安 ...
- 导出(Excel格式)
poi导出,需要的poi jar包: 步骤一.两个工具类: 1.ExcelUtil.java package util; import java.awt.Color; import java.io.F ...