面向Socket编程

前段时间做了一个面向Socket编程的项目,现在有时间和大家分享一下

首先是线程池:

Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

这里我用的是newCachedThreadPool,因为要满足多用户短连接的需求,newFixedThreadPool可能也是一种好的选择,因为它避免多次开启关闭线程造成的资源浪费,但考虑到当没用线程执行时,线程依然开启,浪费资源,就没有使用。newScheduledThreadPool和newSingleThreadExecutor不满足该项目需求。由于项目既需要接收数据又需要发送数据,就开启了两个Socket端口,而socket.accept()方法阻塞式的,在开启端口前就需要先通过 ExecutorService exc = Executors.newCachedThreadPool()方式创建线程池,在其中可以指定最大可创建线程数,默认值为1000.下面就是执行代码:

//获得当前正在执行的线程数

int count=((ThreadPoolExecutor)exec).getActiveCount();
//执行线程
exec.execute(new Task(client));

这里很重要的一点是Task这个类必须要实现Runnable接口,我这里面吧连接的通道传到Task中,然后通过socket.getInputStream()得到字节流,为了方便处理把它转化为字符流,new BufferedReader(new InputStreamReader(socket.getInputStream()));以及new PrintWriter(socket.getOutputStream(),true);

而且在实践过程发现重要一点,通道的一端发送数据后立刻关闭通道,在另一端依然可以接受到数据。特意写个测试代码给大家实践,包需要你们自己导入。

服务器端代码:

 1 public class Server {
 2     static ServerSocket server;
 3 
 4     public static void main(String[] args) {
 5 
 6         try {
 7             server = new ServerSocket(8100);
 8             while (true) {
 9                 Socket socket = server.accept();
10                 PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
11                 pw.println("hi:客户端");
12                 pw.close();
13                 socket.close();
14                 System.out.println("服务器已经关闭");
15             }
16         } catch (IOException e) {
17 
18             e.printStackTrace();
19         }
20 
21     }
22 
23 }

客户端代码:

public class Cilent {
	public static void main(String[] args) {
		try {
			String s = "";
			Socket socket = new Socket("localhost", 8100);
			Thread.sleep(2000);
			BufferedReader bf = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));

			if ((s = bf.readLine()) != null) {
				System.out.println(s);
			}
			socket.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

研究后我想可能是因为

客户端 服务端
out-----x------->in
in<--------------out

=========================================================================================================

今天更到这里,后面会介绍一下如何利用osm数据画自己的地图,以及用java实现基于硬盘的TPR树。欢迎感兴趣的小伙伴一起讨论啊

 

转载于:https://www.cnblogs.com/fangxiaoneng/p/8299260.html

自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 自动化学报latex模板——ctex2.4.6和ctex2.9.2直接使用步骤 1.背景及问题 最近在使用自动化学报latex模板写作业时,一只对latex搞不清楚,网上关于各种版本的latex下载了一堆(比如ctex中文套装方案的各个版本及texlive+texstudio方案,中间还升级了miktex,windet等),发现都未能成功编译出来自动化学报的latex模板,反正开始头很大!!!最后终于没忍住打开了: 自动化学报官网下载模板链接,因为我就要用latex模板(不能服输!)找到的解决方案是:使用 阅读详情

相关推荐

Vivado里LDPC IP核怎么配?手把手教你从6144bit数据到完整参数设置

本文详细介绍了在Vivado中配置LDPC IP核的完整流程,从6144bit数据的参数计算到实际IP核设置。通过分析基本图选择、扩展因子计算和移位参数确定等关键步骤,帮助工程师高效完成LDPC编译码的硬件实现,并提供了时序控制、仿真验证和性能优化的实用技巧。

weixin_30352645的博客 482

socket编程详解

网络通信的本质是进程间通信,是一种需要依靠IP地址和端口号的进程间通信,我们把这种基于IP地址和端口号的进程间通信叫做socket通信。socket的中文意思是插座,socket通信的模式类似于插板插座这样的模式,通信双方都必须要知道对方的IP地址和端口号就相当于把插板和插线接通,这样才能进行通信。而基于这种模式进行网络通信的编程就是socket编程。(Socket,通常也称为“套接字”)

知其然 知其所以然 7966

【RT-DETR涨点改进】独家小目标涨点改进篇 | TGRS 2025 | RT-DETR引入ABRNet小目标检测顶刊中的:ARF自适应性感受野和MCA双向交叉轴注意力,适合小目标检测有效涨点

本文提出了一种改进的RT-DETR小目标检测方法,通过集成自适应感受野模块(ARF)和多尺度交叉轴注意力模块(BC)来提升检测性能。ARF模块采用多种卷积核动态调整感受野,有效捕获多尺度目标特征并减少背景干扰;BC模块通过多尺度交叉轴注意力机制增强全局信息提取和特征融合能力。实验表明,该方法在复杂背景下显著提升了红外小目标检测的精度和效率,同时降低了计算开销。文章详细介绍了模块结构、原理及实现代码,并提供了多种改进配置方案,为小目标检测任务提供了有效的解决方案。

Ai缝合怪、助力小伙伴高效发论文 542

Socket网络编程:TCP与UDP

socket网络编程:TCP与UDP

Edward2022的博客 8596

基于TCP(面向连接)的socket编程

基于TCP(面向连接)的socket编程 一.基于TCP(面向连接)的socker编程的服务器端程序流程如下: (1) 创建套接字(socket) (2) 将套接字绑定到一个本地地址和端口上(bind) (3) 将套接字设置为监听模式,准备接收客户请求(listen) (4) 等待客户请求的到来;当客户请求到来后,接受连接请求,返回一个新的对...

weixin_34138056的博客 460

Socket编程入门:从IP到端口全解析

本文介绍了网络编程的基础知识,重点讲解了TCP/UDP协议、socket编程接口以及实现简单UDP客户端/服务器的方法。主要内容包括:1. 网络基础概念:IP地址、端口号、网络字节序,以及TCP/UDP协议的特点和适用场景;2. socket编程接口详解:sockaddr结构体、常见API如socket()和bind()的使用方法;3. UDP网络程序实现:服务端和客户端的完整代码示例,包括数据收发、地址转换等关键操作;4. 网络调试工具:ifconfig和netstat命令的使用说明。文章通过"

Laydya的博客 1279

面向连接的Socket编程

实验二 面向连接的Socket编程 一、 实验目的 1.了解Socket的工作原理、服务方式和类型。 2.了解Socket应用程序的框架结构及相关数据结构。 3.理解面向连接的Socket通信流程。 4.掌握使用WinSock函数编写面向连接的网络应用程序的方法。 二、实验内容和要求 1.编写Windows平台上的基于TCP套接字的服务器应用程序TcpServer。服务器端接收客户端发送的消息,显示收到消息的来源、时间和消息内容,并发客户端回送信息进行接收确认。 2.编写Windows平台上的基于TCP套接

Sum 1850

面向连接的Socket编程模型

面向连接的Socket编程模型

肖氏专栏 1181

socket编程二,面向对象编程

由于第一个socket编程实现的是传递一个字符串,无法实现一个对象传递,下面来改造上次编写的代码实现面向对象编程. [b]第一步:新建一个java project,增加一个User类 如下图:[/b] [img]http://dl2.iteye.com/upload/attachment/0120/7643/90824a00-bba3-3798-b480-84854d166660....

leifengchuan的博客 274

网络socket编程(一)——socket接口函数、面向数据报的UDP编程及测试、select函数应用

本文对网络编程接口socket进行了简单的阐述,并介绍了一些编程中常用的socket接口函数。后针对面向数据报的UDP进行实战编程和测试,分别实现了UDP客户端和服务端的编程,还针对UDP可能会丢包的缺陷在程序中调用select设置接收超时。测试工具使用SocketTool和UDP_tester,搭建测试环境,测试结果达到了预期的效果。

weixin_45389997的博客 2203

面向非连接的基础Socket编程

实验三 面向非连接的基础Socket编程 一、 实验目的 1.了解面向非连接的Socket通信流程。 2.掌握使用WinSock函数编写面向非连接的网络应用程序的方法。 二、实验内容 利用数据报套接字编程实现网络通信程序。要求如下: 1.发送端从控制台读取信息并发送,接收端接收信息后打印信息然后回送收到的信息。信息的发送和接收可以多次进行。当收到的信息为“exit”时,双方程序退出。 2.启动发送端和接收端程序进行信息收发测试。 三、实验原理 面向非连接就是udp通信 数据报式套接字提供无连接的书籍传输服

Sum 1602

Socket网络编程学习笔记(2):面向连接的Socket

转自:http://www.cnblogs.com/licongjie/archive/2006/10/26/540640.html   在上一篇中,我列了一些常用的方法,可以说这些方法是一些辅助性的方法,对于分析网络中的主机属性非常有用。在这篇中,我将会介绍一下面向连接(TCP)socket编程,其中辅以实例,代码可供下载。       对于TCP的Socket编程,主要分二部分

Star_Mei的专栏 692

python 面向对象编程tcp_python面向对象、类、socket网络编程

类和对象python3统一了类与类型的概念;类==类型;从一组对象中提取相似的部分就是类;特征与技能的结合体就叫做对象;类的功能:初始实例化;属性引用;1、数据属性;2、函数属性;对于一个实例来说,只一种功能:属性引用;示例:class Garen:camp = 'Demacia'def __init__(self,nickname,aggresivity,life_value):self.nic...

weixin_39911916的博客 156

实验四 面向SOCKET编程

实验四 面向SOCKET编程实验目的:1、理解SOCKET的基本原理;2、学会面向SOCKET编程的代码编写及理解各语句内容;3、掌握面向SOCKET编程的具体应用。实验要求:1、建立两个独立的面向SOCKET编程JAVA工程,用于服务器和客户端系统;2、建立SOCKETJAVA类,并能正确运行且能实现SOCKET通信;3、对JAVA类的功能进行拓广,使SOCK

精确管理知识库 2万+

基于面向连接的socket编程

原文链接:http://blog.csdn.net/u011484045/article/details/49516785 基于面向连接的socket编程 基于面向连接的socket编程就是基于TCP的socket编程。基于TCP的socket编程的服务器器端程序和客户端程序的流程如下: 服务器端程序 1、创建套接字(socket); 2、将套接字绑定到一个本地地址和端口

学习学习再学习 797

UDP(面向无连接)的socket编程

服务器端(接收端)程序: 1、创建套接字(socket)。 2、将套接字绑定到一个本地地址和端口上(bind)。 3、等待接收数据(recvfrom)。 4、关闭套接字。客户端(发送端)程序: 1、创建套接字(socket)。 2、向服务器发送数据(sendto)。 3、关闭套接字。1)recvfrom The recvfrom function receives a datagra

Gordennizaicunzai的博客 854

C++ Socket网络编程 1.5版本 使用C++面向对象编程对服务端进行改进

本节实现用C++的面向对象编程来封装服务端的业务逻辑。面向对象编程的优点这里就不赘述了,封装后的类可以使业务逻辑更清晰,完成复杂的功能更容易。 基本实现的方法没有太多改变,只是讲服务端Socket通信的每个步骤封装到了类中。OnRun函数用于Select网络模型请求判断。 在后续的改进中,可以将为类添加更多的成员变量或成员函数,或者构造派生类,实现不同的业务逻辑。 class EasyTcpSer...

La745739773的博客 534

Windows网络编程面向非连接的Socket编程

更多精彩内容,请见:http://www.16boke.com by zxy,Java/C++编程交流群:168424095 面向非连接的Socket通信是基于UDP的。 UDP是User Datagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务 服务器和客户端进程实现面向非连接的Socket通信的过程及调用的函数 sendto()函数,功能发送数据,函数

踏踏实实的。。。 2045
上一篇: 刷题常用字符流和字节流
下一篇: 用OSM数据画地图(含代码)
abc4145
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值