netty服务器,c客户端,为什么服务器接收不到消息呢,客户端是用的测试软件 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 0%
Netty 客户端和服务端发送与接受消息
刚好翻以前拍的照片,今天就发几张去朋友家撸猫拍的照片吧。 微信公众号 王皓的GitHub:https://github.<em>c</em>om/Tena<em>c</em>...
netty 开发问题,客户端发了请求后收不到响应
pa<em>c</em>kage org.<em>netty</em>_<em>c</em>lient; import io.<em>netty</em>.bootstrap.Bootstrap; import io.<em>netty</em>.<em>c</em>hannel.ChannelFuture; import io.<em>netty</em>.<em>c</em>hannel.ChannelInitializer; import io.<em>netty</em>.<em>c</em>hannel.ChannelOption; import io.<em>netty</em>.<em>c</em>hannel.EventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.nio.NioEventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.So<em>c</em>ketChannel; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.nio.NioSo<em>c</em>ketChannel; publi<em>c</em> <em>c</em>lass Client { publi<em>c</em> void <em>c</em>onne<em>c</em>t(String host,int port) { EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap strap = new Bootstrap(); strap.group(group); strap.<em>c</em>hannel(NioSo<em>c</em>ketChannel.<em>c</em>lass); strap.option(ChannelOption.TCP_NODELAY, true); strap.handler(new ChannelInitializer() { @Override prote<em>c</em>ted void initChannel(So<em>c</em>ketChannel arg0) throws Ex<em>c</em>eption { arg0.pipeline().addLast(new ClientHandler()); } }); ChannelFuture future = strap.<em>c</em>onne<em>c</em>t(host, port).syn<em>c</em>(); future.<em>c</em>hannel().<em>c</em>loseFuture().syn<em>c</em>(); System.out.println("<em>c</em>lose"); } <em>c</em>at<em>c</em>h (InterruptedEx<em>c</em>eption e) { e.printSta<em>c</em>kTra<em>c</em>e(); }finally { group.shutdownGra<em>c</em>efully(); } } publi<em>c</em> stati<em>c</em> void main(String[] args) { new Client().<em>c</em>onne<em>c</em>t("127.0.0.1", 8080); } } pa<em>c</em>kage org.<em>netty</em>_<em>c</em>lient; import java.io.UnsupportedEn<em>c</em>odingEx<em>c</em>eption; import io.<em>netty</em>.buffer.ByteBuf; import io.<em>netty</em>.buffer.Unpooled; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerAdapter; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerContext; publi<em>c</em> <em>c</em>lass ClientHandler extends ChannelHandlerAdapter{ private ByteBuf buf; publi<em>c</em> ClientHandler() { String r = "first request"; byte[] req = r.getBytes(); buf = Unpooled.buffer(req.length); buf.writeBytes(req); System.out.println("send request:" + r); } publi<em>c</em> void <em>c</em>hannelA<em>c</em>tive(ChannelHandlerContext <em>c</em>tx) { <em>c</em>tx.writeAndFlush(buf); } publi<em>c</em> void <em>c</em>hannelkRead(ChannelHandlerContext <em>c</em>tx,Obje<em>c</em>t msg) throws UnsupportedEn<em>c</em>odingEx<em>c</em>eption { System.out.println(1); ByteBuf buf = (ByteBuf)msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("re<em>c</em>eive response:" + body); } publi<em>c</em> void ex<em>c</em>eptionCaught(ChannelHandlerContext <em>c</em>tx,Throwable e) { e.printSta<em>c</em>kTra<em>c</em>e(); <em>c</em>tx.<em>c</em>lose(); } } pa<em>c</em>kage org.<em>netty</em>_server; import io.<em>netty</em>.bootstrap.ServerBootstrap; import io.<em>netty</em>.<em>c</em>hannel.ChannelFuture; import io.<em>netty</em>.<em>c</em>hannel.ChannelInitializer; import io.<em>netty</em>.<em>c</em>hannel.ChannelOption; import io.<em>netty</em>.<em>c</em>hannel.EventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.nio.NioEventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.So<em>c</em>ketChannel; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.nio.NioServerSo<em>c</em>ketChannel; publi<em>c</em> <em>c</em>lass Server { publi<em>c</em> void bind(int port) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap server = new ServerBootstrap(); server.group(bossGroup,workerGroup); server.<em>c</em>hannel(NioServerSo<em>c</em>ketChannel.<em>c</em>lass); server.option(ChannelOption.SO_BACKLOG, 1024); server.<em>c</em>hildHandler(new ChannelInitializer(){ @Override prote<em>c</em>ted void initChannel(So<em>c</em>ketChannel arg0) throws Ex<em>c</em>eption { arg0.pipeline().addLast(new ServerHandler()); } }); ChannelFuture future = server.bind(port).syn<em>c</em>(); System.out.println("启动服务端口:" + port); future.<em>c</em>hannel().<em>c</em>loseFuture().syn<em>c</em>(); System.out.println("<em>c</em>lose"); } <em>c</em>at<em>c</em>h (InterruptedEx<em>c</em>eption e) { e.printSta<em>c</em>kTra<em>c</em>e(); }finally { bossGroup.shutdownGra<em>c</em>efully(); workerGroup.shutdownGra<em>c</em>efully(); } } publi<em>c</em> stati<em>c</em> void main(String[] args) { new Server().bind(8080); } } pa<em>c</em>kage org.<em>netty</em>_server; import java.io.UnsupportedEn<em>c</em>odingEx<em>c</em>eption; import io.<em>netty</em>.buffer.ByteBuf; import io.<em>netty</em>.buffer.Unpooled; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerAdapter; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerContext; publi<em>c</em> <em>c</em>lass ServerHandler extends ChannelHandlerAdapter{ @Override publi<em>c</em> void <em>c</em>hannelRead(ChannelHandlerContext <em>c</em>tx,Obje<em>c</em>t msg) throws UnsupportedEn<em>c</em>odingEx<em>c</em>eption { ByteBuf buf = (ByteBuf)msg; byte[] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("re<em>c</em>eive request:" + body); String r = "response"; byte[] re = r.getBytes(); ByteBuf resp = Unpooled.<em>c</em>opiedBuffer(re); // resp.readBytes(re); System.out.println("send response:" + r); <em>c</em>tx.write(resp); } @Override publi<em>c</em> void <em>c</em>hannelReadComplete(ChannelHandlerContext <em>c</em>tx) { <em>c</em>tx.flush(); } publi<em>c</em> void ex<em>c</em>eptionCaught(ChannelHandlerContext <em>c</em>tx,Throwable e) { e.printSta<em>c</em>kTra<em>c</em>e(); <em>c</em>tx.<em>c</em>lose(); } } 测试结果: send request:first request 启动服务端口:8080 re<em>c</em>eive request:first request send response:response 但是<em>客户端</em>没收到响应,有朋友能看下么,只是写个简单的例子而已
netty客户端通过tcp通信自定义协议解码编码的问题
最近做一个项目需要学一些通讯相关的技术,<em>netty</em><em>客户端</em>与服务端联通后需要对服务端返回信息进行解析;因为是客户自定义的就不能同<em>netty</em>自带的解码器;解码一直搞不定,求问一下大家: 协议要求: 1.总
c++客户端和java(Netty)服务器端tcp通讯
基于t<em>c</em>p通讯,涉及java的<em>netty</em><em>服务器</em>的推送功能和<em>c</em>++so<em>c</em>ket的封装以及protobuf在java和<em>c</em>++中的使用。
netty 超时,登录,心跳,状态模式等解问题
物联网交流群:651219170 不要只做伸手党,希望大家能多分享多交流。 在使用 <em>netty</em> 的时候可能会出现: 1.设备链接 <em>netty</em> 之后,不做登录操作,也不发送数据,白白浪费so<em>c</em>ket资源。 2.设备链接之后不做认证,就发送数据(对于这样的流氓我们肯定是断开了)。 3.设备链接之后,也登录成功了,但是网络异常,设备掉线了。这时候<em>服务器</em>是感知<em>不到</em>的(浪费资源)。 4.设备超时...
netty使用特殊字符拆包,收不到数据
问题描述 <em>netty</em>使用特殊字符拆包,代码都对,就是收<em>不到</em>数据 解决 发送的数据末尾必须是分割的字符串才行
socket 客户端发送成功,服务端没有接收到也没报错
private stati<em>c</em> bool SendString(string strMessage, ref string rsp) { bool result = false; So<em>c</em>ket <em>c</em> =
使用其它客户端软件为何接收不了netty服务端返回的数据呢
我编了一个java程序,功能是实现<em>netty</em>的服务端,开启9400端口<em>接收</em>数据。 ``` publi<em>c</em> <em>c</em>lass e<em>c</em>hoServer { private int port; publi<em>c</em> e<em>c</em>hoServer(int port) { this.port = port; } publi<em>c</em> void start() { EventLoopGroup boosGroup = new NioEventLoopGroup(1); //bossGroup EventLoopGroup workerGroup = new NioEventLoopGroup(); //workGroup try{ServerBootstrap sbs = new ServerBootstrap().group(boosGroup, workerGroup) .<em>c</em>hannel(NioServerSo<em>c</em>ketChannel.<em>c</em>lass) .lo<em>c</em>alAddress(new InetSo<em>c</em>ketAddress(port)) .<em>c</em>hildHandler(new ChannelInitializer() { prote<em>c</em>ted void initChannel(So<em>c</em>ketChannel <em>c</em>h) { <em>c</em>h.pipeline().addLast("de<em>c</em>oder", new StringDe<em>c</em>oder()); <em>c</em>h.pipeline().addLast("en<em>c</em>oder", new StringEn<em>c</em>oder()); <em>c</em>h.pipeline().addLast(new e<em>c</em>hoServerHandler()); } }).option(ChannelOption.SO_BACKLOG, 128) .<em>c</em>hildOption(ChannelOption.SO_KEEPALIVE, true); ChannelFuture future = sbs.bind(port).syn<em>c</em>(); System.out.println("Server start listen at " + port); future.<em>c</em>hannel().<em>c</em>loseFuture().syn<em>c</em>(); } <em>c</em>at<em>c</em>h (Ex<em>c</em>eption e) { boosGroup.shutdownGra<em>c</em>efully(); workerGroup.shutdownGra<em>c</em>efully(); } } publi<em>c</em> stati<em>c</em> void main(String[] args) { new e<em>c</em>hoServer(9400).start(); } } ``` <em>客户端</em>使用的软件为Insomnia,向9400端口发送一个<em>消息</em>。 想尝试将服务端<em>接收</em>到的<em>消息</em>原样返回给Insomnia。 ``` publi<em>c</em> <em>c</em>lass e<em>c</em>hoServerHandler extends ChannelInboundHandlerAdapter { @Override publi<em>c</em> void <em>c</em>hannelRead(ChannelHandlerContext <em>c</em>tx, Obje<em>c</em>t msg) throws Ex<em>c</em>eption { System.out.println("Server <em>c</em>hannelRead...."); System.out.println(<em>c</em>tx.<em>c</em>hannel().remoteAddress()+"->Server :"+msg.toString()); <em>c</em>tx.write("Server write"+msg); //原样返回 <em>c</em>tx.flush(); } @Override publi<em>c</em> void ex<em>c</em>eptionCaught(ChannelHandlerContext <em>c</em>tx, Throwable <em>c</em>ause) throws Ex<em>c</em>eption { <em>c</em>ause.printSta<em>c</em>kTra<em>c</em>e(); <em>c</em>tx.<em>c</em>lose(); } } ``` 但却失败了 ![图片说明](https://img-ask.<em>c</em>sdn.net/upload/201904/06/1554541837_482996.png) 想问一问具体原因是什么? 以及请问如何解决?
netty4 服务端同步客户端返回的结果
 <em>netty</em>是一个异步通信框架,在有的时候我们想使用服务端向<em>客户端</em>发送<em>消息</em>,服务端同步等待<em>客户端</em>返回结果然进行下一步的业务逻辑操作。那要怎么做才能同步获取<em>客户端</em>返回的数据呢?这里我用到了JDK中的闭锁等待 CountDownLat<em>c</em>h,接下来看看代码如何实现: 服务端: pa<em>c</em>kage <em>c</em>om.example.demo.server; import <em>c</em>om.example.demo.<em>c</em>a<em>c</em>...
Netty服务端和客户端的连接保持只有一个
在实现了服务端和<em>客户端</em>的连接后,<em>客户端</em>每次重启后都和服务端进行重连,导致了一堆的<em>c</em>hannle 的出现。但是只有一个最后一次的<em>c</em>hannel是有用的,其他都在timeout的时候回收。但是本身建立这么多<em>c</em>hannel是很费资源的,我如何保证一个<em>客户端</em>只和服务端建立一个长连接,其他都无法建立起来呢。我现在实现的框架是<em>netty</em>,请高手指点
Netty消息接收类故障案例分析
《Netty 进阶之路》、《分布式服务框架原理与实践》作者李林锋深入剖析Netty<em>消息</em><em>接收</em>类故障案例。李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的同学可以持续关注。1. 背景1.1 <em>消息</em><em>接收</em>类故障尽管Netty应用广泛,非常成熟,但是由于对Netty底层机制不太了解,用户在实际使用中还是会经常遇到各种问题,大部分问题都是业务使用不当导致的。Netty使用者需要学习Net...
Socket Client 怎么连接 Netty Server
如题,想在需要用Netty做一个Server端。用来<em>接收</em>So<em>c</em>ket Client发送的Request. 感觉已经连接上了,但是就是没有把请求文本打出来。不知道是怎么回事了。 Netty Server
netty客户端连接后无限发送数据,连接不上时无限重试,断线重连
在之前的<em>netty</em>文章里,刚开始学,利用<em>netty</em>实现webso<em>c</em>ket写了一个聊天程序。 纯<em>netty</em>实现http,webso<em>c</em>ket协议,头像上传,搭建实时聊天室,群聊,私聊,文字,图片<em>消息</em> 本文的需求已经在文章的标题体现了。那接下来一一实现吧!首先从连接开始! 如果先启动<em>客户端</em><em>c</em>lient,<em>客户端</em>连接不上服务端server,<em>客户端</em>就会无限重试 关键代码,添加一个连接监听器:(...
Netty4客户端使用遇到的坑笔记
1.注意ChannelPipeline中handler的调用顺序。完整的发送与<em>接收</em>过程,是先发送再<em>接收</em>,所以是先执行out再执行in。具体参考https://blog.<em>c</em>sdn.net/u014614038/arti<em>c</em>le/details/80487942 2.发送数据转码,通过MessageToByteEn<em>c</em>oder,比如我使用的是SMessage格式数据: publi<em>c</em> <em>c</em>lass S...
Netty4实现HTTP请求、响应
前言: 我们所编写的项目多以BS为主,用户通过浏览器访问我们的<em>服务器</em> 发送的请求以HTTP请求为主,本例就以Netty4来实现一个<em>接收</em>HTTP请求的<em>服务器</em>,并根据用户请求返回响应 1.Netty中HTTP请求和响应类 请求(FullHttpRequest) /** * Combine the {@link HttpRequest} and {@link FullHttpMessage}, s...
Netty 发送消息失败或者接收消息失败的可能原因
1. <em>消息</em>发送失败:   检查通道是否建立成功    Netty中的通道建立采用的是异步方式,获取到的通道对象可能为空或初始化未完成; 2. <em>接收</em>的<em>消息</em>有丢失   <em>消息</em>可能会粘包,是否有拆包机制    转载于:https://www.<em>c</em>nblogs.<em>c</em>om/virgosnail/p/10387164.html...
基于netty的java服务器c客户端
这里只有<em>服务器</em>端,主要实现<em>服务器</em>转发<em>客户端</em>的<em>消息</em>,区分是否是发<em>消息</em>的<em>客户端</em>。 这里对代码都进行了备注,可以接受<em>c</em><em>客户端</em>的<em>消息</em>。 1.MyChatServer pa<em>c</em>kage <em>c</em>om.zqq.<em>netty</em>.FireTest_one; import io.<em>netty</em>.bootstrap.ServerBootstrap; import io.<em>netty</em>.<em>c</em>hannel.ChannelFut...
Netty服务端与客户端通信
最近开始学习Netty, 服务端: publi<em>c</em> <em>c</em>lass TimeServer { publi<em>c</em> void bind(int port) throws Ex<em>c</em>eption { /** * NioEventLoopGroup 是用来处理I/O操作的多线程事件循环器, * Netty提供了许多不同的EventLoopGroup的...
netty TCP第三次握手服务器不到
环境:JDK1.8 <em>c</em>entos 7.3 一个springboot项目,设备接口用的<em>netty</em> webso<em>c</em>ket。 做压力测试时候 当并发达到2000 3000多后,无法再连接。这个时候把<em>客户端</em>全部
netty客户端断开连接服务器能够感知到,不使用发送心跳包的方式
最近公司有需求,使用<em>netty</em><em>服务器</em>来操作设备,这个设备是应答模式,就是上位机发送指令后,下位机会应答(应答才表示指令发送成功),开始的时候我使用的是发送心跳包(心跳包是一个指令,设备会应答)的方式来确定设备是否还在连接中,后来发现电池的电量消耗太快(由于想要省电,当时已经设置为10s一次心跳了,但是还是太快),我们的使用场景是在用户设备使用过程中是不会充电的,所以只能想别的办法,最后找到了一个解...
Netty 消息接收类故障案例分析
背景 <em>消息</em><em>接收</em>类故障 尽管 Netty 应用广泛,非常成熟,但是由于对 Netty 底层机制不太了解,用户在实际使用中还是会经常遇到各种问题,大部分问题都是业务使用不当导致的。Netty 使用者需要学习 Netty 的故障定位技巧,以便出了问题能够独立、快速的解决。 在各种故障中,Netty 服务端<em>接收</em><em>不到</em><em>客户端</em><em>消息</em>是一种比较常见的异常,大部分场景下都是用户使用不当导致的,下面我们对常见的<em>消息</em><em>接收</em>...
Netty客户端和服务端发送接收消息
效果图:服务端发送<em>消息</em>,<em>客户端</em>进行<em>接收</em> 说明:我们这个<em>netty</em>需要用到jar包,请大家自行下载,添加 jar下载地址:http://<em>netty</em>.io/downloads.html <em>netty</em>官方地址: http://<em>netty</em>.io/ <em>netty</em>4.x 官方地址:http://<em>netty</em>.io/wiki/user-guide-for-4.x.html Netty 实现聊天功能:ht...
netty5.0客户端发送消息服务器接收失败
pa<em>c</em>kage <em>c</em>om.v<em>c</em>.<em>netty</em>.simple<em>c</em>hat.<em>c</em>lient; import io.<em>netty</em>.bootstrap.Bootstrap; import io.<em>netty</em>.<em>c</em>hannel.Channel; import io.<em>netty</em>.<em>c</em>hannel.EventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.nio.NioEventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.nio.NioSo<em>c</em>ketChannel; import java.io.BufferedReader; import java.io.InputStreamReader; publi<em>c</em> <em>c</em>lass SimpleChatClient { publi<em>c</em> stati<em>c</em> void main(String[] args) throws Ex<em>c</em>eption{ new SimpleChatClient("127.0.0.1", 9833).run(); } private final String host; private final int port; publi<em>c</em> SimpleChatClient(String host, int port){ this.host = host; this.port = port; } publi<em>c</em> void run() throws Ex<em>c</em>eption{ EventLoopGroup group = new NioEventLoopGroup(); try { Bootstrap bootstrap = new Bootstrap() .group(group) .<em>c</em>hannel(NioSo<em>c</em>ketChannel.<em>c</em>lass) .handler(new SimpleChatClientInitializer()); Channel <em>c</em>hannel = bootstrap.<em>c</em>onne<em>c</em>t(host, port).syn<em>c</em>().<em>c</em>hannel(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("["+in.readLine()+"]"); while(true){ <em>c</em>hannel.writeAndFlush(in.readLine() + "\r\n"); } } <em>c</em>at<em>c</em>h (Ex<em>c</em>eption e) { e.printSta<em>c</em>kTra<em>c</em>e(); } finally { group.shutdownGra<em>c</em>efully(); } } } 以上是<em>客户端</em>代码。 ********************************************************** /** * @author v<em>c</em> DateTime 2015年3月30日 下午2:06:01 * @version 1.0 */ pa<em>c</em>kage <em>c</em>om.v<em>c</em>.<em>netty</em>.simple<em>c</em>hat.<em>c</em>lient; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerContext; import io.<em>netty</em>.<em>c</em>hannel.SimpleChannelInboundHandler; publi<em>c</em> <em>c</em>lass SimpleChatClientHandler extends SimpleChannelInboundHandler { // @Override // prote<em>c</em>ted void <em>c</em>hannelRead0(ChannelHandlerContext <em>c</em>tx, String s) throws Ex<em>c</em>eption { // System.out.println(s); // } /*@Override publi<em>c</em> void <em>c</em>hannelRead(ChannelHandlerContext <em>c</em>tx, Obje<em>c</em>t obj) throws Ex<em>c</em>eption { System.out.println(<em>c</em>tx.toString()); System.out.println(obj.toString()); };*/ @Override prote<em>c</em>ted void messageRe<em>c</em>eived(ChannelHandlerContext <em>c</em>tx, String msg) throws Ex<em>c</em>eption { System.out.println(msg); } } 以上是<em>c</em>lientHandler代码 ************************************************************** pa<em>c</em>kage <em>c</em>om.v<em>c</em>.<em>netty</em>.simple<em>c</em>hat.server; import io.<em>netty</em>.bootstrap.ServerBootstrap; import io.<em>netty</em>.<em>c</em>hannel.ChannelFuture; import io.<em>netty</em>.<em>c</em>hannel.ChannelOption; import io.<em>netty</em>.<em>c</em>hannel.EventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.nio.NioEventLoopGroup; import io.<em>netty</em>.<em>c</em>hannel.so<em>c</em>ket.nio.NioServerSo<em>c</em>ketChannel; publi<em>c</em> <em>c</em>lass SimpleChatServer { private int port; publi<em>c</em> SimpleChatServer(int port) { this.port = port; } publi<em>c</em> void run() throws Ex<em>c</em>eption { EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1) EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (2) b.group(bossGroup, workerGroup) .<em>c</em>hannel(NioServerSo<em>c</em>ketChannel.<em>c</em>lass) // (3) .<em>c</em>hildHandler(new SimpleChatServerInitializer()) //(4) .option(ChannelOption.SO_BACKLOG, 128) // (5) .<em>c</em>hildOption(ChannelOption.SO_KEEPALIVE, true); // (6) System.out.println("SimpleChatServer 启动了"); // 绑定端口,开始<em>接收</em>进来的连接 ChannelFuture f = b.bind(port).syn<em>c</em>(); // (7) // 等待<em>服务器</em> so<em>c</em>ket 关闭 。 // 在这个例子中,这不会发生,但你可以优雅地关闭你的<em>服务器</em>。 f.<em>c</em>hannel().<em>c</em>loseFuture().syn<em>c</em>(); } finally { workerGroup.shutdownGra<em>c</em>efully(); bossGroup.shutdownGra<em>c</em>efully(); System.out.println("SimpleChatServer 关闭了"); } } publi<em>c</em> stati<em>c</em> void main(String[] args) throws Ex<em>c</em>eption { int port; if (args.length > 0) { port = Integer.parseInt(args[0]); } else { port = 9833; } new SimpleChatServer(port).run(); } } 以上是<em>服务器</em>端代码 ****************************************************************** pa<em>c</em>kage <em>c</em>om.v<em>c</em>.<em>netty</em>.simple<em>c</em>hat.server; import io.<em>netty</em>.<em>c</em>hannel.Channel; import io.<em>netty</em>.<em>c</em>hannel.ChannelHandlerContext; import io.<em>netty</em>.<em>c</em>hannel.SimpleChannelInboundHandler; import io.<em>netty</em>.<em>c</em>hannel.group.ChannelGroup; import io.<em>netty</em>.<em>c</em>hannel.group.DefaultChannelGroup; import io.<em>netty</em>.util.<em>c</em>on<em>c</em>urrent.GlobalEventExe<em>c</em>utor; publi<em>c</em> <em>c</em>lass SimpleChatServerHandler extends SimpleChannelInboundHandler { // (1) publi<em>c</em> stati<em>c</em> ChannelGroup <em>c</em>hannels = new DefaultChannelGroup(GlobalEventExe<em>c</em>utor.INSTANCE); @Override publi<em>c</em> void handlerAdded(ChannelHandlerContext <em>c</em>tx) throws Ex<em>c</em>eption { // (2) Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); for (Channel <em>c</em>hannel : <em>c</em>hannels) { <em>c</em>hannel.writeAndFlush("[SERVER] - " + in<em>c</em>oming.remoteAddress() + " 加入\n"); } <em>c</em>hannels.add(<em>c</em>tx.<em>c</em>hannel()); } @Override publi<em>c</em> void handlerRemoved(ChannelHandlerContext <em>c</em>tx) throws Ex<em>c</em>eption { // (3) Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); for (Channel <em>c</em>hannel : <em>c</em>hannels) { <em>c</em>hannel.writeAndFlush("[SERVER] - " + in<em>c</em>oming.remoteAddress() + " 离开\n"); } <em>c</em>hannels.remove(<em>c</em>tx.<em>c</em>hannel()); } // @Override // prote<em>c</em>ted void <em>c</em>hannelRead0(ChannelHandlerContext <em>c</em>tx, String s) throws Ex<em>c</em>eption { // (4) // Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); // for (Channel <em>c</em>hannel : <em>c</em>hannels) { // if (<em>c</em>hannel != in<em>c</em>oming){ // <em>c</em>hannel.writeAndFlush("[" + in<em>c</em>oming.remoteAddress() + "]" + s + "\n"); // } else { // <em>c</em>hannel.writeAndFlush("[you]" + s + "\n"); // } // } // } @Override publi<em>c</em> void <em>c</em>hannelA<em>c</em>tive(ChannelHandlerContext <em>c</em>tx) throws Ex<em>c</em>eption { // (5) Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); System.out.println("SimpleChatClient:"+in<em>c</em>oming.remoteAddress()+"在线"); } @Override publi<em>c</em> void <em>c</em>hannelIna<em>c</em>tive(ChannelHandlerContext <em>c</em>tx) throws Ex<em>c</em>eption { // (6) Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); System.out.println("SimpleChatClient:"+in<em>c</em>oming.remoteAddress()+"掉线"); } @Override publi<em>c</em> void ex<em>c</em>eptionCaught(ChannelHandlerContext <em>c</em>tx, Throwable <em>c</em>ause) { // (7) Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); System.out.println("SimpleChatClient:"+in<em>c</em>oming.remoteAddress()+"异常"); // 当出现异常就关闭连接 <em>c</em>ause.printSta<em>c</em>kTra<em>c</em>e(); <em>c</em>tx.<em>c</em>lose(); } @Override prote<em>c</em>ted void messageRe<em>c</em>eived(ChannelHandlerContext <em>c</em>tx, String msg) throws Ex<em>c</em>eption { Channel in<em>c</em>oming = <em>c</em>tx.<em>c</em>hannel(); for (Channel <em>c</em>hannel : <em>c</em>hannels) { if (<em>c</em>hannel != in<em>c</em>oming){ <em>c</em>hannel.writeAndFlush("[" + in<em>c</em>oming.remoteAddress() + "]" + msg + "\n"); } else { <em>c</em>hannel.writeAndFlush("[you]" + msg + "\n"); } } } } 以上是serverHandler代码 ```
关于SOCKET 服务器接收不到客户端消息
问题是这样的,两端连接成功了,然后我<em>服务器</em>端发送给<em>客户端</em>的时候,<em>客户端</em>可以显示出来。而<em>客户端</em>发送给<em>服务器</em>端的时候却显示不出来。 两个的发送代码如下 void CSo<em>c</em>ketServerDlg::OnS
tcp 服务端 能收到客户端信息,客户端却收不到服务端的信息
arm开发板上发静态图片两半都可通信。 但是通过摄像头抓取到的图像传输给p<em>c</em>机时,arm却收<em>不到</em>p<em>c</em>机传来的信息,这是为什么?
socket服务端接收不到客户端信息
目前和移动的短信网关做一个接口,我作为<em>客户端</em>,开启一个线程,用于<em>接收</em>短信。 和服务端建立so<em>c</em>ket连接后,保持不断,每隔几秒钟读取一下输入流,如果读取到发过来的<em>消息</em>,解析后,返回给服务端一个结果,但
Netty实现客户端和服务端的通信
Netty是Apa<em>c</em>he团队的又一个优秀的So<em>c</em>ket框架,它和mina是一个团队开发的,所以很多思想是相同的,接下来,我们就来实现<em>客户端</em>和服务端的双向通信。        首先,我们定义<em>消息</em>类型:        /** * <em>消息</em>类型 * @author 李熠 * */ publi<em>c</em> enum MsgType { PING,SEND,LOGIN,NO_TARGET }分别是心跳、发送、
java netty 服务端向客户端发送16进制数据,客户端无法接收-已解决
项目中需要通过<em>netty</em>与C语言建立连接,双方是通过16进制进行数据传输 本案例主要介绍如何在JavaNetty与C Sok<em>c</em>et进行字符串通信,Java服务端,C<em>客户端</em>。 重点提示:网络通信中都是byte字节,两边通信一定要统一编码,尽量避免乱码与<em>接收</em><em>不到</em>的问题。 1.设置ChildChannelInitializer.java中initChannel(So<em>c</em>ketChannel <em>c</em>...
关于Netty出现的那些跳不过去的坑以及Netty长连接单独获取服务端数据
本文属于小编纯手打文章,欢迎转载,注明出处即可https://blog.<em>c</em>sdn.net/Alex_81D/arti<em>c</em>le/details/80606023 其实想了很久才写这篇文章,因为网上关于Netty的例子的确太多,但当初因为Netty获取数据问题困扰了我将近一个月,内心饱受煎熬,先说出自己的问题所在: 1.在实时通信时需要做长连接,让他开启一个持续的永不关闭(或者可以手动关闭的)通道...
关于netty服务端向客户端发送数据问题
1.我用的是<em>netty</em>4,服务端向<em>客户端</em>主动发<em>消息</em>我的做法是把之前的<em>c</em>hannel对象放到缓存里,然后取出来write,不知道这种做法是否合理? 2.还有一个问题是基于上面的做法,<em>c</em>hannel.wr
socket通信,服务器能收到客户端发来的信息,但客户端不到服务器发来的信息
<em>服务器</em>端:CAsyn<em>c</em>So<em>c</em>ket类 <em>客户端</em>:CSo<em>c</em>ket类 现在的情况是,<em>服务器</em>与<em>客户端</em>建立连接后,<em>服务器</em>能收到<em>客户端</em>发来的信息,但<em>客户端</em>收<em>不到</em><em>服务器</em>发回的信息。 以下是<em>客户端</em>的创建套接字及连接服
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLo<em>c</em>alThreadLo<em>c</em>al是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.<em>c</em>om/JavaFamily 有一线大厂面试点脑图、个人联系方式,欢迎Star和完善 前言 <em>消息</em>队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在<em>消息</em>队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
究竟你适不适合买Mac
我清晰的记得,刚买的ma<em>c</em>book pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买ma<em>c</em>的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来<em>不到</em> 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格 命名风格 类名使用UpperCamelCase风格 方法名,参数名,成员变量,局部变量都统一使用lowerCamel<em>c</em>ase风格 常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长 ...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+py<em>c</em>harm2019.3+selenium+xpath+<em>c</em>hromedriver)其中要使用py<em>c</em>harm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.<em>c</em>n/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.<em>c</em>om/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tom<em>c</em>a
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向<em>服务器</em>发起请求,然后返回数据。 2.解析数据。爬虫程序会把<em>服务器</em>返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
Python绘图,圣诞树,花,爱心 | Turtle篇
1.画圣诞树 import turtle s<em>c</em>reen = turtle.S<em>c</em>reen() s<em>c</em>reen.setup(800,600) <em>c</em>ir<em>c</em>le = turtle.Turtle() <em>c</em>ir<em>c</em>le.shape('<em>c</em>ir<em>c</em>le') <em>c</em>ir<em>c</em>le.<em>c</em>olor('red') <em>c</em>ir<em>c</em>le.speed('fastest') <em>c</em>ir<em>c</em>le.up() square = turtle.Turtle()
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看<em>不到</em>啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的<em>消息</em>,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
Linux 命令(122)—— watch 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] wat<em>c</em>h(1) manual
Linux 命令(121)—— cal 命令
1.命令简介 2.命令格式 3.选项说明 4.常用示例 参考文献 [1] <em>c</em>al(1) manual
记jsp+servlet+jdbc实现的新闻管理系统
1.工具:e<em>c</em>lipse+SQLyog 2.介绍:实现的内容就是显示新闻的基本信息,然后一个增删改查的操作。 3.数据库表设计 列名 中文名称 数据类型 长度 非空 newsId 文章ID int 11 √ newsTitle 文章标题 var<em>c</em>har 20 √ newsContent 文章内容 text newsStatus 是否审核 var<em>c</em>har 10 news...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 It<em>c</em>hat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用it<em>c</em>hat给亲人朋友发送分析报告(本文) 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 it<em>c</em>hat 发送数据统计报告 it<em>c</em>hat 是一个基于 web微信的一个框架,但微信官方并不允
新来个技术总监,禁止我们使用Lombok!
我有个学弟,在一家小型互联网公司做Java后端开发,最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重,一来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE。 但是这些都不是我这个学弟和我吐槽的点,他真正和我吐槽的是,他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok。但是又没给出十分明确的,可以让人信服的理由。 于...
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div on<em>c</em>li<em>c</em>k=""&gt;123&lt;/div&gt; div1.on<em>c</em>li<em>c</em>k = fun<em>c</em>tion(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
2020金三银四,一篇文章教你如何征服面试官,拿到offer
2020年,跳槽面试就靠它们了,现在每天刷题,看源码文档,最近看的这些题目还是有些难度,有一部分我都要好好想一想才能回答出来,或者回答不出来,总的来说知识宽度够了深度还跟不上。所以要重点突破下底层的东西。这篇文章我总结了很久,希望对正在准备面试的同仁们有点帮助。没错我就是传说中的面霸!! 一. 面试准备 首先,是笔试题,这点是初级程序员绕不过去的坎。 笔试题一般的公司都会出的,除非你是大牛,可以选...
用Python开发实用程序 – 计算器
作者:隋顺意 一段时间前,自己制作了一个库 “sui-math”。这其实是math的翻版。做完后,python既然可以轻易的完成任何的数学计算,何不用python开发一个小程序专门用以计算呢? 现在我们越来越依赖于计算器,很多复杂的计算都离不开它。我们使用过各式各样的计算器,无论是电脑自带的,还是网也上的计算器,却都没有自己动手编写属于自己计算器。今天就让我们走进计算器的世界,用python来编写...
Python学习笔记(语法篇)
本篇博客大部分内容摘自埃里克·马瑟斯所著的《Python编程:从入门到实战》(入门类书籍),采用举例的方式进行知识点提要 关于Python学习书籍推荐文章 《学习Python必备的8本书》 Python语法特点: 通过缩进进行语句组织 不需要变量或参数的声明 冒号 1 变量和简单数据结构 1.1 变量命名 只能包含字母、数字和下划线,且不能以数字打头。 1.2 字符串 在Python中,用引号...
小白也会用的情人节表白神器
鉴于情人节女朋友总说直男,上网找了个模板,改了一下,发现效果还不错。然后又录了一个视频,发现凑合,能用。现在免费分享给程序员,去表白去吧。​​​​​​。当然比较low因为考研没时间优化,懒着优化了。 先看一下效果吧:页面太多了,这里我只放几个页面里面有音乐,还凑合不是太单调。 所有页面最后的合成效果: 接下来教大家如何使用: 新建文件夹:love 然后建立这几个...
论如何用python发qq消息轰炸虐狗好友
因为我的某个好友在情人节的时候秀恩爱,所以我灵光一闪制作了qq<em>消息</em>轰炸并记录了下来。 首先 我的编程环境是: windows 10系统 python3.6 记得要下载win32 pip install win32 思路介绍 其实也非常简单 将要发出去的句子储存在列表中 然后用随机模块调用 将随机出来的元素储存在剪贴板中 连接QQ 找到指定对象 疯狂输出 怎么样,简单吧 开始打代码吧 imp...
Python爬取冠状病毒“谣言”新闻进行数据分析
一、前言 今天给大家介绍的爬虫项目是爬取冠状病毒谣言数据,因为最近网络上有很多关于冠状病毒的谣言,官方也积极的出来辟谣,作为一名数据爱好者,我也想尽自己一份微薄之力,分享一些有用的数据分享,希望大家在特殊情况下能明辨是非,保护好自己和家人! 二、爬取数据 话不多说了,直接上代码( <em>c</em>opy即可用 ) import requests import pandas as pd <em>c</em>lass Sp...
情人节闲着无聊写个python程序
用python在图片上写字 ''' 依赖,需要安装Pillow pip install Pillow ''' from PIL import Image, ImageDraw, ImageFont import sys #判断参数个数,可以不要 import os #判断文件是否存在,可以不要 image_path = "1.jpg" font_path = "SIMLI.TTF" tex...
2020程序员面试必备!58道精选面试题,这样学习,大厂没问题!
面试题目: 1-10题: 1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、Serializable 和Par<em>c</em>elable 的区别 8、静态属性和静态方法是否可以被...
新型冠状病毒,疫情实时追踪。
说来惭愧,享受CSND的帮助已经16年了,却从来没有为他人做过贡献。今天开始本人将坚持在CSDN发布个人技术文章,为自己巩固理解、也为他人排忧解难。 最近,新型冠状病毒的实时疫情一直牵动着每个人的心,作为一名程序员在这非常时期希望能通过技术手段为大家提供实时的调情播报。 项目名称:新型冠状病毒,疫情实时追踪 技术标签:Html5、Css、JavaS<em>c</em>ript、Jquery、Ajax、E<em>c</em>ha...
MySQL 性能优化的 21 个最佳实践
1. 为查询缓存优化你的查询  大多数的 MySQL <em>服务器</em>都开启了查询缓存。这是提高性最有效的方法之 一,而且这是被 MySQL 的数据库引擎处理的。当有很多相同的查询被执行了多 次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不 用操作表而直接访问缓存结果了。   这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因 为,我们某些查询语句会让 MySQL 不使用缓...
2020美赛A题解题思路(Moving North)
Problem A:Moving North 由于海洋温度升高的原因,美国东北海岸的龙虾种群正在往北迁移到海洋温度更低的加拿大海岸附近。 但是这会影响到加拿大东岸(即苏格拉北大西洋)的渔业公司的经营。他们想知道,如果全球温度继续升温,苏格拉渔场的鲱鱼和鲭鱼会如何迁移,因为这两种鱼是他们主要的经济来源(而他们的渔船又没有制冷设备,无法长期保存活鱼)。 问题1:建立数学模型,预测50年内该两种鱼群的迁...
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还<em>不到</em> 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
京东抢购Python脚本
京东购物车抢购商品Python代码1.准备工作2.代码 1.准备工作 环境要求: Python3.8.1;Firefox浏览器 插件安装: 1.安装Python相关库(在Windows的<em>c</em>md里面安装) pip install selenium pip install datetime 2.安装Firefox浏览器驱动:Ge<em>c</em>koDriver提取码:e4tv(确保电脑已经有Firefox),...
记录每天背的单词,准备考研。(2月15日)
一、每日感想 Nothing in the world is diffi<em>c</em>ult for one who sets his mind to it。 世上无难事,只怕有心人。 考研路上,艰险不断,诱惑不断,但我们永远无法停止自己的脚步,要像一个战士那样无畏冲锋。每个人在自己的领域上,学精学通便是对社会的最大贡献,最忌就是每种都学,样样都不精通,那样是最可悲的,就像船帆没有方向,在大海中肆意漂泊,最后...
Java实现 LeetCode 54 螺旋矩阵
54. 螺旋矩阵 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,3,6,9,8,7,4,5] 示例 2: 输入: [ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12] ] 输出: [1,...
python用pip install时安装失败的一系列问题
昨天想下载python的pillow库,结果遇到各种问题 一些注意事项和问题的解决方案如下: 先检查python是否安装成功 命令行直接输入python 安装成功会显示如下图 如果发现不对,可查看控制面板–系统与安全–系统–高级系统设置–环境变量–PATH 添加你python应用程序所在的位置 如,我添加的是F://python 确保python安装成功后,输入pip install pill...
python编程实战-----飞机大战
飞机大战 500行代码实现飞机大战 import pygame import sys from pygame.sprite import Sprite from pygame.sprite import Group from time import sleep import pygame.font # 修改游戏的一些新设置 <em>c</em>lass Settings(): """存储《外星人入侵》的所有...
【面试题总结一】JAVA基础
前言 因为比较喜欢写JAVA,所以之前面试的时候看了不少的面试的问题,但是面了两家完全没有问到我这些,十分的尴尬,所以我觉得花点时间把之前看过的东西总结一下。 自动装箱和拆箱 基本数据类型与对应的包装类的自动转换 和C++的强制类型转换有点像。 String,StringBuffer,StringBuilder String是字符串,一般来说一个字符串被定义了就不可变了,如果要使用可变的字符串,...
Python爬虫之一--爬虫获取王者荣耀全英雄皮肤
Python爬虫之一–爬虫获取王者荣耀全英雄皮肤 正题:如何爬取王者荣耀英雄的全皮肤高清图片? 分为两步: 找到皮肤图片的地址 python爬虫下载图片 1. 找到皮肤图片的地址 1、先找到英雄列表 先打开百度“王者荣耀”进入官网,进入https://pvp.qq.<em>c</em>om/,按F12进入调试界面,然后按F5刷新界面,图中标识的herolist.json文件就是我们所需要的英雄列表,其中包括英雄...
leetcode18. 四数之和
给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,<em>c</em>和 d,使得a + b + <em>c</em> + d的值与target相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为...
阿里Java4面已拿offer,面试真题+面试技巧分享
在今年2月份的时候我去面试了阿里,经历了共计4轮的技术面,已经拿到了offer,由于这是我第一次面试大厂,不知道和别人的面试经历有没有什么不一样,所以也不能给大家分享一些什么经验之类的,我就把阿里4面中我记得的面试题献上了,希望能给想要去阿里系的同学一些帮助! 在面试之前,我有准备目前一线互联网的面试技巧,也分享给这篇文章的读者朋友们! 有想要的小伙伴们就快来找我获取到吧! ...
10.4.变态跳楼梯
变态跳楼梯 一:题目描述 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级±… 它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 二:解题思路 当有1个楼梯时: 青蛙只能从地上跳到第一层楼梯上,因此只有一种跳法 当有2个楼梯时: 青蛙可以从地上直接跳到第二层楼梯,也可以从第一层楼梯跳到第二层楼梯,因此共有2种 当有3个楼梯时: 青蛙可以从地上直接跳到第三层,也可以先跳到...
服务器基础知识(一)
一、<em>服务器</em>简介 <em>服务器</em>:广义上讲,<em>服务器</em>是在网络中为其他客户提供服务的计算机。<em>服务器</em>是计算机的一种,<em>服务器</em>是在操作系统的控制下,为网络环境里的客户机(如PC机)提供共享资源(包括查询、存储、计算操作等)的高性能计算机。 <em>服务器</em>的高性能体现:高速度的GPU运算能力、大容量的高速内存、长时间的可靠运行、强大的I/O外部数据吞吐能力。 <em>服务器</em>的主要组成部件:CPU,内存,磁盘,扩展插槽,显示卡,网卡,...
Linux常用的基本十大命令(一)
1 为什么要学习Linux终端命令? Linux 刚出现时没有图形界面, 所有的操作全靠命令完成. 近几年来, 尽管 Linux 发展得非常迅速, 图形界面越来越友好, 但是在真正的开发过程中, Linux 命令行的应用还是占有非常重要的席位 在工作中,大量的 <em>服务器</em>维护工作 都是在 远程 通过 SSH <em>客户端</em> 来完成的,并没有图形界面,所有的维护工作都需要通过命令来完成。如 磁盘操作、文...
2020美国大学生数学建模(MCM/ICM)A题数据及参考资料
鲱鱼分布图 海面温度数据 官网下载地址:https://www.metoffi<em>c</em>e.gov.uk/hadobs/index.html 收集的://download.<em>c</em>sdn.net/download/qq_39542714/12158332 链接:https://pan.baidu.<em>c</em>om/s/1gtQEFlaUhkzgs4ioq97RpQ 提取码:wpk4 处理数据的软件及...
计算机网络笔记—计算机网络概述
局域网、广域网与Internet 网络种类 特点 局域网 覆盖范围小、自己花钱购买设备、带宽固定、自己维护 网线最远几百米 接口带宽 10M 100M 1000M等 广域网 距离比较远,花钱买服务(带宽),有其他人给你维护,通过拨号ADSL、光纤等方式接入运营商 Internet 很多ISP(网络服务商)组成,服务商有自己的机房,对网民提供Internet访问和连接...
Python小技巧:将图像音视频等资源文件隐藏在代码中
下午有同学Python学习群里说,使用pyinstaller打包源码时,因为代码中使用了图像、音频、视频等资源文件,无法将程序打包成单一的可执行文件。有没有方法将这些资源文件按保存在代码中呢?我想了一下,应该是可以的。于是乎,花了一个小时,写出了下面的代码,算是抛砖引玉吧。
HTML零基础入门教程(十分详细)
参考:http://www.runoob.<em>c</em>om/html/html-tutorial.html 1 什么是HTML HTML 是用来描述网页的一种语言。HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。 HTML 指的是超文本标记语言: HyperText Markup Lan...
2020春招Java面试题型汇总《1》
前言 恍然间就已经到了二月中旬了,还有多少和我一样仍然困在家中办公的同学举个爪,PS(在家真的好无聊啊!!!)&nbsp; &nbsp; &nbsp;但是,疫情也是非常严峻的,大家就尽量躲在家中,少外出吧~ 嗯哼!&nbsp; 虽然疫情仍旧严峻,但是春招的到来也是必不可免的,今天主要就是给大家总结了一下2020的春招试题,打算今年换一份高薪工作的朋友们,记得收藏啊! 那么话不多说,进入今天的分享内...
基于Python的face_recognition库实现人脸识别
一、fa<em>c</em>e_re<em>c</em>ognition库简介 fa<em>c</em>e_re<em>c</em>ognition是Python的一个开源人脸识别库,支持Python 3.3+和Python 2.7。引用官网介绍: Re<em>c</em>ognize and manipulate fa<em>c</em>es from Python or from the <em>c</em>ommand line with the world's simplest fa<em>c</em>e re<em>c</em>ognitio...
python爬取电影天堂首页
用python写了个小爬虫,用来爬取电影天堂首页放置的几十部电影的名称,上映日期和下载链接,用到了beautifulsoup库和lxml库用来解析 代码如下: import requests import re from lxml import etree from bs4 import BeautifulSoup from pandas import DataFrame <em>c</em>lass dytt:...
python数据可视化之Seaborn(一)
写在开头:在Titani数据可视化中使用到了Seaborn的绘图,为了弄清楚Seaborn绘图的内容,于是开始分享它的相关内容。本文主要参考文献为路远老师的sns教程以及官方文档链接放在文章最后。全文相当于是一个学习的训练。 Seaborn其实就是在matplotlib的基础上进行的高级封装,调用一些封装好了的图形设置。但其设计的灵活性不如matplotlib,因此Seaborn可以说是能够锦...
努力做个中年程序员
27岁的那年,我问一个本科毕业就从事软件行业的同学,我说:“我准备去读研究生,30岁的时候才毕业,是不是有点儿晚?”他告诉我:“30岁是技术最好的时候。” 我吓了一跳,但是我实在不想继续当初中计算机老师了,有什么意思呢?虽然感觉前面的路可能会有困难,但还是硬着头皮去读吧。终于,2011年1月毕业了,2011年2月开始进公司,到现在,2020年2月,刚好9年。9年,也应该小有成就...
java学习【一】
JDK的配置原理与数据类型转换 书写是对思维的缓存,越努力,越幸运!!! 小飞今天就来总结一下java学习笔记吧,具体的jdk配置步骤我就直接上链接了,我就总结一下jdk配置原理吧! jdk安装步骤与环境变量的配置:jdk安装与环境变量配置 下面就是干货了: Java 学习笔记 ——齐飞 $$想要利用编译工具去编译我写好的java源文件 源文件所在的路径与编译工具不在一起,这就需要配置环境变量—...
剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
1. 题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 限制: 0 &lt;= 数组长度 &lt;= 50000 类似题目:LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(二分...
[网络安全自学篇] 四十六.微软证书漏洞CVE-2020-0601 (上)Windows验证机制及可执行文件签名复现
前文分享了简单的病毒原理知识,并通过批处理代码制作病毒,包括自动启、修改密码、定时关机、蓝屏、进程关闭等功能。这篇文章将分享微软证书漏洞CVE-2020-0601,并讲解ECC算法、Windows验证机制,复现可执行文件签名证书的例子。希望这篇基础文章对您有所帮助,更希望大家提高安全意识,学会相关防范,也欢迎大家讨论。
flash模块一下载
flash文档 熟悉绘图工具,绘制以下图案; 使用线条、圆形、矩形工具等 文件格式及保存,将文档保存为fla格式与swf格式。 相关下载链接:[url=//download.csdn.net/download/ljf200221/6698471?utm_source=bbsseo]//download.csdn.net/download/ljf200221/6698471?utm_source=bbsseo[/url]
《最优化导论》习题答案下载
《最优化导论》(第四版)课后习题答案,正在学习凸优化和机器学习的人可以配合着书学习,相信会有帮助。亲测可用, 谢谢支持。 相关下载链接:[url=//download.csdn.net/download/wjr997010331/10758307?utm_source=bbsseo]//download.csdn.net/download/wjr997010331/10758307?utm_source=bbsseo[/url]
简单的搜索引擎 采用特里树下载
在学校做的一个作业,模拟实现一个简易的搜索引擎,自己设计和采用了一些算法,把文档和程序都打包了,希望对学习C语言和研究搜索引擎算法的人有帮助 相关下载链接:[url=//download.csdn.net/download/zhangavelZJU/2591772?utm_source=bbsseo]//download.csdn.net/download/zhangavelZJU/2591772?utm_source=bbsseo[/url]
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
我们是很有底线的