serverSocket编程DEMO

news2024/12/16 16:05:58

目录

0、jar包依赖

1、ServerSocket服务端主程序:

2、任务执行类

3、tomcatJdbcPool:

4、客户端:


0、jar包依赖

1、ServerSocket服务端主程序:

package socket;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 服务端,主程序。
 * @author Administrator
 *
 */
public class M {

	public static void main(String[] args) throws Exception {
		
		@SuppressWarnings("resource")
		ServerSocket serverSocket = new ServerSocket(2001);
		ExecutorService pool = Executors.newFixedThreadPool(100);
		while(true) {
			Socket socket = serverSocket.accept();
			SocketRunnable socketRunnable = new SocketRunnable(socket);
			pool.submit(socketRunnable);
		}
		
	}

}

2、任务执行类

package socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
 * 任务执行类
 * @author Administrator
 *
 */
public class SocketRunnable implements Runnable {
	
	Socket socket;
	

	public SocketRunnable(Socket socket) {
		super();
		this.socket = socket;
	}


	@Override
	public void run() {
		InputStream inputStreamServer;
		try {
			//InputStream相当于从客户端获得数据,OutputStream相当于向客户端发送数据
			inputStreamServer = socket.getInputStream();
			byte[] data = new byte[1024];
			//将读取的内容存储到字节数组中,返回值是存储的字节数
			int length = inputStreamServer.read(data);
			String plcStr = new String(data, 0, length);
			System.out.println("Client:" + plcStr);
			// 添加数据入库的逻辑
			try {
				Connection connection = JdbcPool.getConnection();
				String sql = "insert into plc_source_string(str,createTime) values (?,now())";
				PreparedStatement statement = connection.prepareStatement(sql);
				statement.setString(1, plcStr);
				statement.execute();
				statement.close();
//				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			socket.shutdownInput();
			OutputStream outputStream = socket.getOutputStream();
			outputStream.write("OK".getBytes());
			socket.shutdownOutput();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		

	}

}

3、tomcatJdbcPool:

package socket;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.tomcat.jdbc.pool.DataSource;
/**
 * jdbc工具类
 * @author Administrator
 *
 */
public class JdbcPool {
	
	private static DataSource dataSource = null;
	
	public static Connection getConnection() throws SQLException {
		if(dataSource == null) {
			dataSource = new DataSource();
			dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/plc?characterEncoding=UTF8");
			dataSource.setUsername("root");
			dataSource.setPassword("111111");
			dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
		}
		return dataSource.getConnection();
	}
	
}

4、客户端:

package socket;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
 * 客户端请求
 * @author Administrator
 *
 */
public class Client {

	public static void main(String[] args) throws Exception {
		String ip ="127.0.0.1";
		Socket client = new Socket(ip, 2001);
		OutputStream outputStream = client.getOutputStream();
		
		outputStream.write("347257538620230731103452|1|1,6,7,2|0|4.0|25|OK".getBytes());
		InputStream inputStream = client.getInputStream();
		byte[] b = new byte[1024];
		int read = inputStream.read(b);
		System.out.println(""+new String(b,0,read));
		outputStream.flush();
		client.shutdownOutput();
		client.close();
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1140608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python try-except捕获异常的方法

python try-except捕获异常的方法 执行过程 1、是从try下的代码块1开始执行。 2、如果有异常抛出,异常将被捕获,直接跳转并执行except下的代码块2。、如果代码块1一切正常,没有异常抛出,代码块2就不会执行。 也就是说&#xff…

大语言模型助力审计问题自动定性

国家审计作为以权力监督制约权力的一项制度安排,是党和国家监督体系的重要组成部分,是国家治理大系统中一个内生的具有预防、揭示和抵御功能的“免疫系统”,是国家治理的基石和重要保障,在推进“全面建成小康社会、全面深化改革、…

Lvs+Nginx+NDS

什么是?为什么?需要负载均衡 一个网站在创建初期,一般来说都是只有一台服务器对用户提供服务 ​ 从图里可以看出,用户经过互联网直接连接了后端服务器,如果这台服务器什么时候突然 GG 了,用户将无法访问这…

iOS安全加固方法及实现

​ 目录 iOS安全加固方法及实现 摘要 引言 iOS安全加固方法及实现 一、字符串加密 二、类名方法名混淆 三、程序代码混淆 四、加入安全SDK 总结 参考资料 摘要 本文介绍了iOS平台下的应用安全保护方法,包括字符串加密、类名方法名混淆、程序代码混淆和加入…

input改造文件上传,el-table的改造,点击上传,拖拽上传,多选上传

第一个input标签效果 第二个input标签的效果 el-table的改造效果 <template><div class"outerBox"><div class"analyze" v-if"status"><div class"unFile"><div class"mainBox"><img clas…

如何在日常操作中降低激光切割机的老化速度

光纤激光切割机进入各行各业后给很多行业带来了创新和机遇。光纤激光切割机提升了生产效率、提高了产品品质的、降低了生产成本&#xff0c;节约了加工材料&#xff0c;同时加速了新产品的研发进程。然而光纤激光切割机作为一台机械设备也会面临老化和高能耗的问题。 假如维护保…

WebDAV之π-Disk派盘 + 言叶

言叶是一个功能丰富的笔记软件,为跨平台而设计,可以为你在手机、电脑和其他设备中实现多端同步。从而实现高效率的记事和办公。支持Markdown的语言和多种计算机语法高亮功能,让你笔记中的内容更加主次分明,可以在这里记录一些代码什么的。同时还可以在笔记中插入图片,使其…

安卓开发实例:方向传感器

调用手机的方向传感器&#xff0c;X轴&#xff0c;Y轴&#xff0c;Z轴的数值 activity_sensor.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.c…

微信JSAPI支付对接

简介 JSAPI支付是指商户通过调用微信支付提供的JSAPI接口&#xff0c;在支付场景中调起微信支付模块完成收款。 应用场景 JSAPI支付适用于线下场所、公众号场景和PC网站场景。 商户已有H5商城网站&#xff0c;用户通过消息或扫描二维码在微信内打开网页时&#xff0c;可以调…

我做了一个世界杯的可视化网站...

好吧我是标题党&#xff0c;标题用的是完成时&#xff0c;但是事实上我这个还没完成。 这学期有个数据可视化的作业&#xff0c;遂决定做一个世界杯主题的可视化网站。基于Python、Flask和Echarts。 大概思路可以用下图表示&#xff1a; 因此网站也将分为3个大块&#xff0c;…

解决图表内容超出xy轴范围

问题&#xff1a; 解决方式&#xff1a; xAxis: {boundaryGap: true, // 留白属性 }

忆联再次与 OpenCloudOS 完成产品兼容性互认证

近日&#xff0c;忆联数据中心级SSD UH711a与OpenCloudOS 完成相互兼容认证&#xff0c;测试期间&#xff0c;整体运行稳定&#xff0c;在功能、性能及兼容性方面表现良好。 兼容认证证书 作为国产开源操作系统社区&#xff0c;OpenCloudOS 沉淀了腾讯及多家厂商在软件和开源生…

JS清除字符串中的空格

一、replace()方法 replace方法在字符串中搜索值或正则表达式&#xff0c;返回已替换值的新字符串&#xff0c;不会更改原始字符串。 去除字符串内所有的空格&#xff1a;str str.replace(/\s*/g,“”) 去除字符串内两头的空格&#xff1a;str str.replace(/^\s*|\s*$/g,“…

人大加拿大女王大学金融硕士项目——不一定有逆风翻盘,但一定要向阳而生

只有足够努力&#xff0c;才会足够幸运。想要得到世界上最好的东西&#xff0c;得先让时间看到最好的你。不一定有逆风翻盘&#xff0c;但一定要向阳而生。作为在职人士&#xff0c;不断的提升自己是非常重要的。如果停滞不前&#xff0c;便会被社会所淘汰。而人大加拿大女王大…

计讯物联外贸公司--佰沃恩应邀出席第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛

10月22日&#xff0c;以“数智创新能动未来”为主题的第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛于集美海景皇冠假日酒店正式启幕。此论坛聚焦集美区战略前沿产业&#xff0c;汇聚来自全国各地优秀的企业家、高校及科研院所专家学者&#xff0c;并邀请相关领域的亲…

【EI会议征稿通知】第二届材料科学与智能制造国际学术会议(MSIM 2024)

第二届材料科学与智能制造国际学术会议&#xff08;MSIM 2024&#xff09; 2024 2nd International Conference on Materials Science and Intelligent Manufacturing 2024年第二届材料科学与智能制造国际学术会议 &#xff08;MSIM2024&#xff09;将于2024年1月19日至21日在…

【递归】Pow(x , n)(Java版)

目录 1.题目解析 2.讲解算法原理 2.1.如何来解决Pow问题&#xff1f; 2.2.为什么这道题可以用递归来做&#xff1f; 2.2.1 什么是递归 2.2.2 为什么会用到递归 3.如何编写递归代码&#xff1f; 4.递归的细节展开图 1.题目解析 50.Pow(x , n) 实现 pow(x, n) &#xf…

echarts 实现tooltip自动轮播显示,鼠标悬浮时暂停

在ECharts中&#xff0c;可以通过设置 tooltip.trigger"axis" &#xff0c;来显示数据轴上的提示框。 实现tooltip的自动轮播显示&#xff0c;结合使用 setInterval()和 dispatchAction()方法。 获取chart DOM 实例&#xff0c;监听鼠标事件&#xff0c;悬浮时清空定…

【java学习—九】接口 interface(5)

文章目录 1. 相关概念2. 接口的特点3. 应用举例3.1. 特点&#xff1a;接口中的成员变量和方法的默认修饰3.2. 特点&#xff1a;一个类可以实现多个无关的接口3.3. 特点&#xff1a;接口可以继承接口3.4. 特点&#xff1a;实现接口的类中必须提供接口中所有方法的具体实现内容&a…

2核4G服务器5M带宽?选腾讯云轻量应用服务器吧

2核4G服务器5M带宽&#xff1f;选腾讯云轻量应用服务器吧&#xff0c;因为划算&#xff0c;价格便宜&#xff01;2023腾讯云双11优惠活动&#xff1a;轻量2核4G5M服务器166.6元/年&#xff0c;3年566.6元&#xff0c;50GB SSD云硬盘&#xff0c;300GB月流量&#xff0c;值得买的…