socket客户端关闭,服务端怎么处理

socket客户端关闭了,服务端会报错,怎么让服务端任然正常运行?

0

3个回答

那是因为你代码有问题

0
Tang_Mr
鬼手_团长 回复qian337816953: 用的是java,不知道要在哪里去监视客户端离线。
接近 2 年之前 回复
qian337816953
qian337816953 回复Tang_Mr: 当然不会报错,服务端监视到客户端离线的话,将客户端从客户端列表中删除即可。你用C#还是VC?
接近 2 年之前 回复
Tang_Mr
鬼手_团长 客户端和服务端通信的时候,客户端关闭,服务端难道不报错吗?
接近 2 年之前 回复

我没用过Java,我只做过C++的客户端服务端通信,客户端服务端是两个软件啊,断开连接只要回“service has been stoped”,软件怎么会报错,难道你说的报错就是指断开连接时需要有反馈信息?

0
PrintWriter pw=null;
        try {
            /*
             * InputStream getInputStream()
             * Socket 提供的该方法可以提供一个输入流,
             */
            InputStream in=socket.getInputStream();
            InputStreamReader isr=new InputStreamReader(in,"UTF-8");
            BufferedReader br=new BufferedReader(isr);

            /*
             * 通过Socket获取输出流,用于将消息发送给客户端
             */
            OutputStream os=socket.getOutputStream();
            OutputStreamWriter osw=new OutputStreamWriter(os,"UTF-8");
            pw=new PrintWriter(osw,true);

            /*
             * 将该客户端的输出流存入到共享集合中
             * 
             * 由于多个线程都会调用该集合的add方法向其中添加
             * 输出流,所以为了保证线程安全,可以将该集合加锁.
             */
            synchronized (allOut) {
                allOut.add(pw);
            }


            sendMessage(host+"上线了,当前在线:"+allOut.size()+"人");
            System.out.println(host+"上线了");

            String message=null;
            while((message=br.readLine())!=null){
                synchronized (allOut) {
                    /*
                     * 转发给所有客户端
                     */
                    sendMessage(host+"说:"+message);
                }

//                  pw.println(host+"说:"+message);
//                  System.out.println(host+":");
//                  System.out.println(message);
            }
        } catch (Exception e) {

        } finally{
            /*
             * 处理客户端断开连接后的工作
             */

            /*
             * 将该客户端的输出流从共享集合中删除
             */
            sendMessage(host+"下线了,当前在线:"+allOut+"人");
            System.out.println(host+"下线了");
            synchronized (allOut) {
                allOut.remove(pw);
            }


            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

之前写过的一些代码,感觉和你描述的问题相近,你可以参考下

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
客户端关闭,服务器端SocketException异常解决方案
关于客户端一关闭,服务器就提示SocketException:connection reset的实际解决方案。
android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
我用socket分别创建了一个服务器和一个客户端。rr当服务器程序运行时,客户端和服务器发送接收数据是OK的。rr但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException。但这个时间间隔很久,要三到四分钟才会抛出这个异常的。刚开始还以为是死机了呢!rr我想在客户端做一个处理:如果服务器未开,要弹出一个提示框,然后结束当前程序。r请问怎么实现?rr附创建客户端的部分代码
怎么让客户端关闭后服务器不会报错?
标题:怎么让客户端关闭后服务器不会报错?n解释:当你客户端(clientSocket)连接上服务器(serverSocket)之后,服务器会创建一个clientSocket,这个clientSocket和你自己的客户端进行交互,当你关闭客户端时,在服务器中的clientSocket还在一直就收客户端发送的消息,所以会报错,因此我们在就收消息这里写一个try{} catch{}语句就可以了:n ...
Python 服务器socket关闭后自动执行工作
重写原socket的一些方法来实现 nnnimport socketnfrom _socket import getdefaulttimeoutnnclass MySocket(socket.socket):n """重写服务器端socket"""n def __init__(self, *args, **kwargs):n super().__init__(*args,...
WebSocket客户端断开连接后,服务器端的处理机制
以网页形式存在的客户端,按F5刷新后,服务器端扑捉到disconnect事件:nnsocket.on('disconnect', function(){ n log.info("disconnect");n eventEmitter.emit('close',socket);n });nn在这个事件处理函数的上下文里,socket结构能获取到的信息有:nn_events: 该套接字上...
客户端断开socket连接, 服务端send 向一个失效的socket 发送数据,导致服务的进程退出
问题描述:nn客户端断开socket连接, 服务端send 向一个失效的socket 发送数据,导致服务的进程退出。nn原因分析:nn在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。n这个信号的缺省处理方法是退出进程,大多数时候这都不是我们期望的。因此我们需要重载这个信号的处理方法。nn解决方法可以有两...
Socket服务器端断开后重新打开,客户端将自动完成链接
Socket通信技术。利用到了Thread技术,完成了,服务器开启,一直监听客户端功能,两点是,当服务器端断开后重新打开后,客户端能自动链接到服务器端,由于网络原因最多延迟2分钟
linux socket tcp server 解决客户端socket断开后, 服务器端进程退出的问题
当服务器监听并接受一个客户端链接的时候, 可以不断向客户端发送数据, 这时如果客户端断开socket链接, 服务器继续向一个关闭的socket 发送数据(send, write)的时候, 系统会默认对服务器进程发送一个SIGPIPE信号, 这个信号的默认动作就是终止当前服务器进程.rn所以为了解决客户端断开后导致服务器进程结束的问题, 使用如下方法忽略SIGPIPE信号.rnstruct siga
Netty网络处理之客户端主动关闭
TCP状态变化  应用层及时关闭连接:ESTABLISHED –> CLOSE_WAIT –> LAST_ACK –> CLOSED; n  应用层未在指定时间内关闭连接:ESTABLISHED –> CLOSE_WAIT –> CLOSED; nNetty处理过程  TCP状态进入CLOSE_WAIT时会产生OP_READ事件通知应用层,Netty从socket读取数据时返回-1,close被设为
java nio中,为什么客户端一方正常关闭了Socket,而服务端的isReadable()还总是返回true?...
我这篇文章想讲的是编程时如何正确关闭tcp连接。首先给出一个网络上绝大部分的java nio代码示例:服务端:1首先实例化一个多路I/O复用器Selector2然后实例化一个ServerSocketChannel3ServerSocketChannel注册为非阻塞(channel.configureBlocking(false);)4Se...
Socket 客户端不显示的关闭连接服务端read一直阻塞
rn初次学习socket,写了下面例子rnpublic class SocketServer {rnrn public static void main(String[] args) {rn int port = 8089;rn ServerSocket server = null;rn InputStream in = null;rn Socket socket = null;rn t...
C# socket服务端判断 客户端已经断开连接的一个小办法
具体原理就是: nIf the remote host shuts down the Socket connection with the Shutdown method, and all available data has been received, the Receive method will complete immediately and return zero bytes. n中文翻
【Java】NIO 客户端关闭
nio的客户端如果关闭了,服务端还是会收到该channel的读事件,但是数目为0,而且会读到-1,其实-1在网络io中就是socket关闭的含义,在文件时末尾的含义,所以为了避免客户端关闭服务端一直收到读事件,必须检测上一次的读是不是-1,如果是-1,就关闭这个channel。nelse if(key.isReadable()){n ByteBuffer buffer = ByteBu
Socket服务端,长连接,心跳包,自动释放掉线资源,可扩展处理数据接口
头文:nn最近看网上写Sokect编程,好多都写的没法扩展,不能复用,既然是面向对象,就多多少少应该有面向对象的思想,所以自己下午写了一个,没优化,有不好的地方请指出.nn解析:nnSocket的基本原理这里就不讲了,只贴代码和解释代码,不会讲很细.nn大致分为四个部分,3个部分都是一个单独的线程.1个部分为哈希表共享资源nn服务模块:SocketService,用于接受客户端连接.nn检测模块:...
Python下UDP的Socket编程:服务器端因客户端的非正常退出而报错?
服务器端代码nnnnimport socketnimport threadingnimport loggingnimport datetimennlogging.basicConfig(format='%(message)s', level=logging.INFO)nnnclass ChatUdpServer:n def __init__(self, ip='127.0.0.1', por...
java编写简单的Socket通信应用 实现服务端同时处理多个客户端
一、编写服务端代码nn在本示例中,服务端主要作用是监听客户端的连接,获取客户端发送的数据。nn第一步:编写服务端主启动类,代码很简单,new一个自定义SocketServerListenHandler类,构造器传入端口号,并启动监听方法listenClientConnect()执行监听客户端连接。注:它的职责仅仅是监听连接。nnnpackage com.io.socket.server;nnimp...
python --- socket服务器与客户端各种状态案例
服务器端:root@kali:~/python/socket# pwdn/root/python/socketnroot@kali:~/python/socket# lsnsocket_server.py socket_server_using.pynroot@kali:~/python/socket# n客户短端:root@kali:~/python/socket# pwdn/root/pyth
Netty服务端如何接受并处理客户端的连接
n n n n1.当客户端开启socket链接服务端的时候,服务器端就会触发accept事件其中accept和read都是调用unsafe的read方法。n2.具体调用的是AbstractNioMessageChannel内部类的NioMessageUnsafe的read方法(注意如果只是read事件不是accept事件则调用的是AbstractNioByteChan...
Linux下客户端主动Close,服务端阻塞的read函数不会马上返回
今天在做一个socket通信的时侯,发现close后,阻塞的read函数并没有马上返回,导致后面的时序出现问题,具体情况如下: n服务端与客户端正常建立通信,都采用阻塞模式。当客户端close后,服务端阻塞的read函数并没有马上返回,并且此时在服务端还可以向此连接写入数据,并成功,然后客户端又成功读到数据,接着服务端阻塞的read函数返回<0,表示断开连接。 n以上客户端主动Close,服务端阻塞
三丶TCP处理客户端异常与正常关闭情况
这个问题在TX 面试的时候问过我。 不过当时demo并没有注意这个问题, 还好面试官换问题了。。一: 正常关闭:    如果客户端是主动申请close , 会发送一串byte数 为0的数据到服务器,服务器就会收到count个数为0,则表示正常关闭。此时服务器正常操作close(这里有个问题是,即便客户端自己正常发送空数据进来,服务器也不会收到0数据,所以当服务器收到0的时候就代表客户端请求正常关闭...
如何解决 Socket 连接超时
最近两天 项目中其中一台IM服务器的IM验证出现问题,进行用户IM注册时出现连接超时问题;n重启服务后,可以进行用户的IM注册验证,没有出现超时问题;但是等到半个钟一个钟(时间不定);n结果还是会有连接超时问题,所有单单是重启解决不了问题,也不可能一有问题就去重启服务n问题一:n登录服务器后台,使用netstat -ant命令查看当前网络状态:(此图是禁用IPV6后截图)nnn发现,
Netty客户端channel主动关闭时,服务端感知并关闭channel的过程
客户端主动关闭连接,服务端关闭channel的过程nnn在服务端中,在AbstractChannel#AbstractUnsafe的close(final ChannelPromise promise)方法上设置断点:这个是比较顶层的方法。nnnn往下看底层开始时的调用栈:在selector接收到该channel的读写事件时,调用processSelectedKey处理进行处理,如下可知,n此时产...
客户端关闭连接服务器端没反应
客户端关闭连接服务器端没反应 或者服务端断开连接,客户端没有反应:rn不管什么情况下,服务器端需要有定时检测机制,因为还有些情况下服务器端也是收不到断开消息的(比如拔网线和意外宕机)
有关服务端主动关闭socket带来的几个问题分析--tcp四次握手半关闭问题导致
     一、场景:nginx开启keep-alive:nn nn  问题描述:nnn upstream prematurely closed connection while reading response header from upstream, client: X.90.10, server: www.example.com, request: &quot;POST /web/?a=b HTTP/...
python简单的socket 服务器和客户端
服务器端代码rnrnnif &quot;__main__&quot; == __name__:rnrn try:rn sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);rn print(&quot;create socket succ!&quot;);rn rn sock.bind(('localhost', 8...
TCP服务器如何判断客户端Socket断开连接 - ZYNQ7021学习
       ARM上基于Linux编写的 TCP 服务器,当客户端断开连接时,使用 select 函数的情况下,服务器仍然会接收到一个信号,在 select 函数会将这个设备描述符标记为可读/写,然后调用 recv 函数,若 recv 函数返回值为 0,则表示客户端已经断开,服务器需要将对应的 Socket 套接字关闭掉,让数据写回磁盘,并释放文件所占用的资源。nn第一步nn       判断多...
golang socket 服务端与客户端
golang socket 服务端与客户端
C# Socket客户端断开后 服务器端没能判断客户端断开
在工作编写一个C#的服务器和Python进行通讯的时候碰到的一个问题,由于工作需求需要,python会每次连接(服务器用的是TCP)服务器就只会发送一条指令然后就会断开连接,下次会重新连接。在这样的情况下就出现了当python客户端断开连接后,服务器这边的Socket没有抛出异常,博主以前的时候都是利用当客户端断开连接的时候抛出的异常来检测是否断开连接。n 在上述的情况下,服务器这边的对应的S
AsyncSocket写的客户端Socket,实现当服务器断开连接时弹窗提示
背景:n在MFC里面用AsyncSocket 写了一个客户端程序,一个按钮发数据,当发送数据时发现如果关闭服务器的监听端口依然会提示数据已发送。原因也许是因为异步Socket没有阻塞,connect后会立刻返回?n过程:n于是百度尝试各种方法,有心跳方法,一秒钟连一次服务器,但感觉对于我这个程序过于被动;又尝试在OnConnect的返回值nerrorcode上面下功夫,发现如果刚开始服务器没
如何处理TCPSocket客户端与服务器端连接中断后的异常
如图,我通过TCP Socket将客户端与服务器建立起双向连接,一旦我关闭客户端,服务器端就会打印如下错误消息:nnnError: Unhandled “error” event. (Lobject object])nat EventEmitter.emit (events.js:186:19)nat Socket. socket.on (C:\Code\KOIWrapper\KOI\backen...
如果服务端重启,那么客户端的长连接会怎么样
这里记录一次服务端重启时,使用winshark的抓包过程;n场景是:SDK 建立对 服务端的长连接,客户端连接策略是:n失活判断: 一条连接 180s都没有read到数据;n保活判断: 每秒检查一次,连续60次检查都为空闲,那么发送一次keeplive包。nn重连逻辑: 如果连接断开,那么会以2s 、 4s、  6s、  8s...这样的递增产生的时延,去重连,每次连接等待5s判断连接超
Socket 多线程客户端与服务端(借鉴了他人)
借鉴了博客:https://blog.csdn.net/zzjstudent/article/details/51899976该博客没有客户端多线程的,我在自己的补上已做记录。客户端class Cserverw implements Runnable { @Override public void run() { try { Socket socket = new Socket(&quot;12...
基于开源SuperSocket实现客户端和服务端通信项目实战
摘要本期带给大家分享的是阿笨在实际工作中遇到的真实业务场景,请跟随阿笨的视角去如何一步步解决WEB网页快速批量打印,如果您对本期的教程内容感兴趣,那么请允许让阿笨带着大家一起学习吧!废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。你准备好了吗,老夫要开始撸了一、需求背景介绍大概是2年以前工作中碰到的一个实际项目,在仓储物流系统中,打印是一个很频繁的操作环节,仓库每天经常需要大批量的在...
socket实现客户端聊天以及服务器消息推送
最近项目需要,恶补学习了一些socket知识,于是顺便练习编写了这个socket相互通讯的程序,希望可以给大家一点启示。nn首先我们需要写出服务器端,代码如下:我们需要本地新建一个端口,其他客户端通过ip及端口访问进来。nnnpackage Socket1;nnimport javax.swing.plaf.metal.OceanTheme;nimport java.io.*;nimport ja...
C# Socket 客户端服务端封装 支持多连接处理 Tasks多线程 队列处理 大数据拆分包处理
Socket 客户端代码封装、服务端代码封装,让使用Socket更简单。 同时服务端支持超过客户端连接(测试超过1万个同时连接稳定运行),Tasks多线程 队列处理 大数据拆分包处理
Socket服务端客户端
Socket服务端客户端Socket服务端客户端Socket服务端客户端Socket服务端客户端Socket服务端客户端
关于客户端断开连接后服务器抛出异常Connection reset
学习了socket  ,在做一个类似qq的c/s结构的聊天软件。发现了一个问题rn就是在客户端与服务器通信后,服务器为客户端开启一个线程,使用while(true)循环时刻监听是否有通信。rn在界面开启时没有任何异常,可是当界面关闭 就一直抛出异常了。rn开启线程代码如下:rnrnrn异常内容如下:rnrnjava.net.SocketException: Connection resetrnat
Java Socket: 服务器重启,客户端自动重连
Java Socket编程:自己写了一个简单的Java Socket Server/Client应用。调试代码的时候,发现只要重启Server,客户端抛出异常,进程断开。rn解决办法:在客户端另外启动一个进程,调用sendUrgentData(0xFF)方法监听是否与服务器端连接成功。rn原来的代码:  public void run() {   String message = &quot;&quot;;rn   ...
及时释放服务端与客户端之间的TCP连接的方法
及时释放服务端与客户端之间的TCP连接的方法TCP的状态转换图n 先贴上tcp状态转换图,方便后面分析问题n n n n n感知对端关闭,及时关闭己方连接  前几天遇到了一个问题,服务端下线,主动断开了连接。但客户端并没有感知到,而是继续使用该连接,导致下次调用服务端报错。  查看客户端和服务端的tcp状态,服务端处于FIN_WAIT_2状态,而客户端处于CLOSE_WAIT状态。  结合
c# socket 服务器端如何判断客户端掉线
c#中的Socket.Connected 不是指当前是否处于连接状态,而是指上一次收发是否完成,不是告诉你将来你收发是否能成功的。rnrn下面是不用发包的检查办法rnrnrn用Socket中的poll方法检查rnrnstatic bool IsSocketConnected(Socket s)n {n return !((s.Poll(1000, SelectMode.Select
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python服务端开发教程 微信公众号服务端开发教程