socket通信

时间:2022-09-18 20:27:04

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通信

socket通信

看到这里,可以知道可以同时进行多个客户端的连接

上面的实例只能是服务器发送消息给客户端,但是客户端不能发送消息,怎么办呢?

请看下面

二:多个客户端同时在线通信,一个客户端发送一条消息,然后全部的客户端都可以收到

这里要新建一个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通信

socket通信的更多相关文章

  1. 我看不下去鸟。。。。Java和C&num;的socket通信真的简单吗?

    这几天在博客园上看到好几个写Java和C#的socket通信的帖子.但是都为指出其中关键点. C# socket通信组件有很多,在vs 使用nuget搜索socket组件有很多类似的.本人使用的是自己 ...

  2. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  3. Socket通信类

    package com.imooc; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  4. AgileEAS&period;NET SOA 中间件平台&period;Net Socket通信框架-介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  5. Android之Socket通信、List加载更多、Spinner下拉列表

    Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务 ...

  6. &period;NET开源高性能Socket通信中间件Helios介绍及演示

    一:Helios是什么 Helios是一套高性能的Socket通信中间件,使用C#编写.Helios的开发受到Netty的启发,使用非阻塞的事件驱动模型架构来实现高并发高吞吐量.Helios为我们大大 ...

  7. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  8. AgileEAS&period;NET SOA 中间件平台&period;Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  9. AgileEAS&period;NET SOA 中间件平台&period;Net Socket通信框架-完整应用例子-在线聊天室系统-下载配置

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

随机推荐

  1. 通过Maven将Web程序部署到远程Tomcat8服务器的一些注意事项

    1.环境变量检查(注意一定要做,否则会出现莫名其妙的错误):JAVA_HOMEM2_HOMECATALINA_HOME 2.开发环境检查,在Eclipse开发环境中最好做以下两方面的检查 2.1)Ma ...

  2. Spring 之注解事务 &commat;Transactional

    众所周知的ACID属性:  原子性(atomicity).一致性(consistency).隔离性(isolation)以及持久性(durability).我们无法控制一致性.原子性以及持久性,但可以 ...

  3. java 枚举类 enum 总结

    枚举定义: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量 ...

  4. Google推Android新开发语言Sky:流畅度 秒iOS

    Dart初衷 作为当前市占率最高的智能手机操作系统,Android平台正在吸引着越来越多的开发者. 不过,对用户而言,Android的体验还不够完善,卡顿的情况时有发生.再深入点理解,许多应用的帧率达 ...

  5. &lpar;转&rpar; Java程序员应该知道的10个调试技巧

    原地址:http://www.****.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺 ...

  6. POJ 2892 Tunnel Warfare &lpar;SBT &plus; stack&rpar;

    题意:给定了初始的状态:有n个村庄连成一条直线,现在有三种操作: 1.摧毁一个村庄 2.询问某个村庄,输出与该村庄相连的村庄数量(包括自己) 3.修复被摧毁的村庄,优先修复最近被摧毁的........ ...

  7. &lbrack;php&rsqb;php时间戳当中关于时区的问题

    PHP_VERSION = 5.5.11 话说php函数 time() 的起始时间戳是从:GMT 1970-01-01 00:00:00 开始算起的 写了点测试代码: $gmt1 = strtotim ...

  8. nodejs之使用express框架连接mongodb数据库

    var express = require('express');var router = express.Router();var app = express();var MongoClient = ...

  9. Module 10:I&sol;O流(java如何实现与外界数据的交流)

    Module 10:I/O流(java如何实现与外界数据的交流) Input/Output:指跨越出了JVM的边界,与外界数据的源头或者目标数据源进行数据交换.               输出   ...

  10. PDO数据访问抽象层(下)

    PDO两大功能 一.事务功能 PDO的事务功能主要控制好几条sql语句同时成功或者同时失败(当其中一条SQL语句有错误时,同时好几条一起失败),失败时可以回滚操作 1.造对象 <?php $ds ...