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 ...
随机推荐
- Apple Pay 初探
Apple Pay 一.概述 1.支付方式:Touch ID/ Passcode 2.设备要求:iPhone6以上(iphone:线上/线下 ipad:线上 watch:线下) 3.系统要求:iOS8 ...
- Visual Studio Emulator for Android 的安装与使用 感觉最干净好看的模拟器.
Step1 win8+ 6G+ 添加删除程序\ hyper 创建虚拟机 安装visual studio android 模拟器, 自带三个模拟器 使用管理员打开模拟器 参考文献 Visual Stu ...
- 【转载】在HTML中插入swf文件(转)
在HTML中插入swf文件(转) 在网页里面插入swf,再平常不过了,一般会想到如下代码: Html代码 <object classid="clsid:D27CDB6E-AE6D-11 ...
- BOOST_AUTO宏
在boost中,有个非常不错的宏BOOST_AUTO(),它的作用是自动给var定义类型,适合function()函数返回的值的类型. int function() { ; } main() { BO ...
- Counter Mode ( CTR )
Encryption Decryption
- Swift - 点击事件奇偶次判断
// 按钮点击事件 func onTouchUpInside() { struct touchUpInside { static var count: Int = 0 } touchUpInside. ...
- 重装系统后如何删除系统自带的office2003
背景:操作系统重装后,系统自带的office2003版本太低不好使用,需要安装更高版本的如2010,但是卸载时提示“无法打开此修补程序包……”,从而无法卸载.经网上查询,采用以下解决办法: 在注册表中 ...
- 与你相遇好幸运,gen8安装
gen8到手后,立马去买了 SSD https://item.jd.com/2010277.html 支架 https://item.jd.com/2671609.html NAS盘 https:// ...
- Jquery便利对象
xhr=[object object] $.each(xhr, function (key, val) { alert(key + '=' + val); ...
- word使用笔记(1)
开始字母的格式也是宋体,只要全选后设置字体为Times New Roman即可,会自动跳过中文 新安的Mathtype字体有点奇怪,在样式里设置了一下,果然自定义为宋体了,改回Times New Ro ...