服务器和多客户端通信
TCP SERVER
ba_wang_mao
目标:(1)、熟练使用FreeRTOS嵌入式操作系统编写单片机程序。(2)、初步熟悉C#和MySQL编写比较简单可靠的C/S架构的TCP通信程序及B/S架构的WEB SERVER程序。(3)、简单熟悉阿里云物联网开发技术(单片机端SDK开发和上位机端SDK开发)。
展开
-
C# Socket服务器及多客户端连接示例(包含:报文解析)
服务端代码【控制台示例】static List<Socket> Sockets = new List<Socket>(); static void Main(string[] args) { int port = 10; byte[] buffer = new byte[1024]; IPEndPoint localEP = new IPEndPoint(IPAddress转载 2021-04-14 22:14:28 · 2005 阅读 · 0 评论 -
C/S和B/S架构总结
一、C/S(Client Server)两层架构1、C/S解析: C是英文单词“Client”的首字母,即客户端的意思,S是英文单词“Server”的首字母,即服务器的意思;C/S就是“Client/Server”的缩写,即“客户端/服务器”模式。2、两层架构分别是: 第一层:客户端——表示层(界面层与逻辑层) 第二层:服务器模式——数据库层3、C/S架构流程:客户机——经过(Request)请求——服务器(即数据库)——数据库根据客户机的请求——进一...转载 2020-07-10 20:56:23 · 1744 阅读 · 0 评论 -
TCP心跳包实现思路
原文地址:http://www.cnblogs.com/scy251147/p/3333957.htmlTCP之心跳包实现思路 说起网络应用编程,想到最多的就是聊天类的软件。当然,在这类软件中,一般都会有一个用户掉线检测功能。今天我们就通过使用自定义的HeartBeat方式来检测用户的掉线情况。心跳包实现思路 我们采用的思路是:客户端连接上服务端以后,服务端维护一个在线用户字典,客户端每隔一段时间,向服务器发送一个心跳包,服务器接收到包以后,字典数据的值都会...转载 2020-07-22 21:48:32 · 535 阅读 · 0 评论 -
心跳包实现的另一种机制
因为工作关系,经常用到心跳包。之前是在服务端中的连接的实体中保持一个timer,每秒加一,每次服务端接到客户端的心跳,就会把计数置为0。 当累加到20秒的时候,服务端会接到客户端抛出的掉线函数回调,就会视为客户端掉线,然后从缓存中删掉掉线用户。 实际测试结果表明,这种判断掉线的方式非常靠谱。7*24小时运行不会出现任何异常。但是每个实体保持一个timer,服务器的开销太大了。 所以这里我想到一种方式,就是在实体中包含一个 DateTime LastRece...转载 2020-07-22 21:58:39 · 224 阅读 · 0 评论 -
客户端client 突然断电了,那么服务器如何快速的知道呢
(1)使用定时器(适合有数据流动的情况)。(2)使用socket选项SO_KEEPALIVE(适合没有数据流动的情况)。 心跳包技术:心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。心跳包的发送,通常有两种技术: 方法1:应用层自己实现的心跳包。 由应用程序自己发送心跳包来检测连接...转载 2020-07-23 21:07:04 · 2073 阅读 · 0 评论 -
Tcp通信中服务器处理客户端意外断开!
所谓意外断开,是客户端(多指支持3G的移动设备)并没有正常关闭socket,双方并未按照协议上的四次挥手去断开连接,一般的处理办法都是利用保活机制。而保活机制分又可以让底层实现也可自己实现。一、双方拟定心跳(自实现) 一般由客户端发送心跳包,服务端并不回应心跳,只是定时轮询判断一下与上次的时间间隔是否超时(超时时间自己设定)。服务器并不主动发送是不想增添服务器的通信量,减少压力。但这会出现三种情况:情况1. 客户端由于某种网络延迟等原因很久后才...转载 2020-07-23 21:20:17 · 2617 阅读 · 0 评论 -
TCP处理客户端异常与正常关闭情况
这个问题在TX 面试的时候问过我。 不过当时demo并没有注意这个问题, 还好面试官换问题了。。一、正常关闭 如果客户端是主动申请close , 会发送一串byte数 为0的数据到服务器,服务器就会收到count个数为0,则表示正常关闭。此时服务器正常操作close(这里有个问题是,即便客户端自己正常发送空数据进来,服务器也不会收到0数据,所以当服务器收到0的时候就代表客户端请求正常关闭)。二、异常关闭 如果客户端强制点了X ,则代...转载 2020-07-23 21:30:29 · 2008 阅读 · 0 评论 -
c#解决TCP“粘包”问题
一:TCP粘包产生的原理1,TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。2,发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘转载 2020-07-22 20:33:34 · 1155 阅读 · 0 评论 -
C# 服务端 Sqllite数据库结构 引发类型为“System.OutOfMemoryException 的异常 处理总结
异常情况:1. 引发类型为“System.OutOfMemoryException”的异常。2. 存储空间不足,无法处理此命令。 (异常来自 HRESULT:0x80070008)3.Out of memory 服务端启动后,开始监听客户端的请求信息,但是服务端运行一段时间(目前约在1周左右),服务端Socket监听失效,记录下错误日志,含以上3个异常类型。服务端Soket监听客户端服务已经失效了,重启后正常运行。 异常排查步骤: ...转载 2020-09-23 09:44:10 · 5298 阅读 · 0 评论 -
C# 服务器和客户端通信粘包处理
void ReceiveBack() { int index = 0; //解析每次报文用的标识 byte[] arr1 = new byte[2048]; List<byte> arr3 = new List<byte>(); // 总的报文集合 int totalLen...原创 2020-08-04 10:15:21 · 342 阅读 · 0 评论 -
如何解决netty自定义协议粘包分包问题
又一次发现公司同事用netty竟然都不处理粘包分包的问题,出了问题都不知道怎么回事,呵呵哒。sp厂商反馈数据已推送至我方提供的地址,但未收到我方的应答,正常推送了一次,又重试三次,都没有收到我方应答。 看了下代码,又跟踪了几条日志,发现sp数据确实有推送,只是我方解析失败。好多数据都是几条信息拼一起过来的,我方只按照头部长度解析了一条,导致许多数据都没有正常更新;还有部分数据是分两次过来的,本来应该放在一起解析一次,我方却解析了两次,自然失败了。 看了下报...转载 2020-08-03 19:35:03 · 1007 阅读 · 0 评论 -
Unity C# 自定义TCP传输协议以及封包拆包、解决粘包问题(网络应用层协议)
本文只是初步实现了一个简单的基于TCP的自定协议,更为复杂的协议可以根据这种方式去扩展。 网络应用层协议,通俗一点的讲,它是一种基于socket传输的由发送方和接收方事先协商好的一种消息包组成结构,主要由消息头和消息体组成。 众所周知,基于socket的信息交互有两个问题: 第一、接收方不能主动识别发送方发送的信息类型,例如A方(客户端)向B方(服务器)发送了一条信息:123,没有事先经过协议规定的话,B方不可能知道这条信息123到...转载 2020-08-03 15:27:35 · 2197 阅读 · 0 评论 -
C#基于Socket的UDP和TCP处理通信报文(包含心跳包+业务处理+数据库)
设备通过TCP/IP接入OMC,此时OMC作为TCP/IP服务端,主设备作为客户端且主设备IP地址和端口号可设。主设备通过开站上报数据包或者登录包来主动接入OMC。开站上报的接入流程如下(登录包与之相似) 包的协议格式如下: 起始标志 (7E) AP层协议类型 (01或03) 承载协议类型 (01) 数据单元(PDU) 校验单元 ...转载 2020-08-01 19:20:57 · 2698 阅读 · 0 评论 -
C# TCP通信以及报文格式和接收处理
https://blog.csdn.net/yuanyuanluoluo/article/details/79984356https://blog.csdn.net/yuanyuanluoluo/article/details/79984356转载 2020-07-31 18:26:14 · 3116 阅读 · 0 评论 -
C#网络程序设计(1)网络编程常识与C#常用特性
网络程序设计能够帮我们了解联网应用的底层通信原理!一、网络编程常识:1、什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网络编程。2、网络编程的层次 现实中的互联网是按照"TCP/IP分层协议栈"的体系结构构建的,因此程序员必须搞清楚自己要做的是哪个层次上的编程工作,TCP/IP协议体系的实现情况:https://www.cnblogs.com/MenAngel/p/6740996.html...转载 2020-07-29 17:17:40 · 740 阅读 · 0 评论 -
C#网络编程TCP通信实例程序简单设计
用TcpClient和TcpListener设计一个Tcp通信的例子。通信程序截图:2个客户端链接服务端测试截图:服务端:客户端运行动态图C#程序设计代码BenXHSocket.dll主要代码设计SocketObject类/*****************************************************...转载 2020-03-27 14:07:33 · 688 阅读 · 0 评论 -
C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
https://blog.csdn.net/scau_11jkx/article/details/30294363?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-18-30294363.nonecase转载 2020-07-21 14:30:50 · 3569 阅读 · 0 评论 -
C#利用Socket实现客户端通信(包含:服务器和客户端通信,客户端通过服务器和客户端通信)
实验功能: 设计程序,分别构建通信的两端:服务器端和客户端应用程序,套接字类型为面向连接的Socket,自己构建双方的应答模式,实现双方的数据的发送和接收(S发给C,C发给S)。 服务端程序能响应单个或任意多个客户端连接请求;服务端能向单个客户发送消息,支持群发消息给所有客户端; 通信的双方具备异常响应功能,包括对方异常退出的处理。如果客户端退出,服务器有响应;反之亦然。 客户端之间直接通信,C与C之间直接通信(不是通过S传递)。 设计思路: 服务..转载 2020-07-21 13:39:06 · 8694 阅读 · 7 评论 -
C#Socket编程服务器和多客户端通信,客户端和客户端通信
对于Socket编程,网上资料、博文一抓一大把,不过大多数都是简单讲解单客户端和服务端通信的实例,这里主要给大家展现一下在.net平台上用窗体程序实现的过程,不过比较有特点的是会告诉大家如何实现不同客户端之间的通信,它们如何通过一个服务端准确的找到对方进行通信,包括上线提醒、私信交流、昵称重名处理等功能。一、服务端架构1、开启监听 简单来说,服务端首先要创建一个监听线程,检测客户端的连接情况,这个部分的程序封装在一个按钮里。主要实现代码如下: Thread...转载 2020-07-20 21:58:14 · 2449 阅读 · 1 评论 -
C#的Socket简单实现消息发送 (详细分析)
Socket一般用于网络之间的通信,在这里,实现的是服务端与客户端的简单消息通信。 首先是客户端的搭建,一般步骤是先建立Socket绑定本地的IP和端口,并对远端连接进行连接进行监听,这里的监听一般开启后台线程进行循环处理;如果远端有连接到本机的Socket的端口,则获取一个新的Socket对象并重新添加一个线程用于对远端地址进行消息通信(消息的收发),这样,服务端的Socket就简单实现,下面是winForm的具体实现。一、服务端 一般步骤是先建...转载 2020-07-17 17:54:02 · 5440 阅读 · 1 评论 -
C# Socket 接受数据不全的处理
由于Socket 一次传输数据有限,因此需要多次接受数据传输。解决办法一: int numberOfBytesRead = 0; int totalNumberOfBytes = 0; do { numberOfBytesRead = mySocket.Receive(receivedData,totalNumberOfBytes , mySocket.ReceiveBufferSize,SocketF转载 2020-07-17 17:54:37 · 1703 阅读 · 1 评论 -
不应该使用Connected属性作为Socket是否连接上的依据
最近在做一个接口,用到了Socket异步通信。调试了3天了,一直将Socket的Connected属性作为客户端和服务器端是否连接上的依据。今天发现我错了。 下面是从一个csdn博友写的,很好。http://blog.csdn.net/xiaobai1593/article/details/7285930 Connected属性获取截止到最后的 I/O 操作时Socket的连接状态。当它返回false时,表明Socket要么从未连接,要么已...转载 2020-07-17 17:54:57 · 282 阅读 · 0 评论 -
C#socket通信时,怎样判断socket双方是否断开连接
我在Server端new了一个socket,然后bind,开了一个线程来accept前来连接的client,每接到一个client前来连接就新开一个线程和它进行通信。 我把Server端得到的socket放到一个集合里,我想知道集合里的socket是否断开连接,如果断开连接我就把它从这个集合里移除。判断socket是否断开连接,网上有N种说法:1.Socket.Connected 这个属性只能说明上一次通信时还是正常的。2.Socket.Pool...转载 2020-07-17 17:55:44 · 5679 阅读 · 1 评论 -
C#服务端判断客户端socket是否已断开的方法
刚开始,用Socket类的Connected属性来实现,却发现行不通,connected只表示是在上次还是操作时连接到远程主机。如果在这之后[连接的另一方]断开了,它还一直返回true, 除非你再通过socket来发送数据。所以通过个属性来判断是行不通的!后来有人说可以用Socket.Available属性来判断,Socket.Available表示获取已经从网络接收且可供读取的数据量。 msdn中说:如果[连接的另一方]断开了,它就会抛出异常。然而,这个BUG报告(htt...转载 2020-07-17 17:55:17 · 5563 阅读 · 0 评论 -
C#服务器怎么知道客户端断开TCP连接
一、使用心跳包因为: 1、正常情况下 客户端断开会产生错误,在连接里面能catch到 2、但是如果客户端是突然断电等情况下,不会产生这个错误 连接会一直等待下去你可以用心跳包来解决1、定义一个与客户连接相关的Boolean变量 b2、客户端那边用一个线程 每隔一定时间发送一个无意义的数据包3、服务器接收到了就将变量b设置为true4、在服务器这边开启一个线程心跳包public void 心跳包() { while (b) { ...原创 2020-07-17 17:53:18 · 6276 阅读 · 0 评论 -
C#socket编程——TCP协议创建服务器端和客户端并进行通信
我们做网络通信的时候需要有通信协议,在进行socket编程的时候有两种通信协议TCP、UDP,这次我们就用简单的方式在一台电脑建立TCP协议的服务器端和客户端并使之进行通信。 服务器端和客户端进行连接,第一步就行在服务器端创建一个socket,开始监听客户端的连接,然后在客户端创建一个socket,向服务器端发起连接,这样连接建立起来之后就可以进行数据的交换。 由于Visual Studio一个解决方案下边只能启动一个项目,所以我们要创建两个解决方案(打开...转载 2020-07-16 08:54:00 · 2892 阅读 · 3 评论 -
C#使用Socket实现一个socket服务器与多个socket客户端通信
https://blog.csdn.net/guomei1345/article/details/80595163转载 2020-07-16 09:34:29 · 1826 阅读 · 0 评论 -
【TCP通信】多客户端连接一个服务器端总结
Windows下TCP通信,多个客户端连接服务器端。一、服务器端流程实现如下:1、通过socket函数,创建基于流式类型的socket,可名为serverSocket;2、调用bind函数,绑定本地的监听端口号和本地IP地址;3、调用listen函数,开始监听客户端请求。其中该函数第二个参数指定了最大连接客户端数目;4、通过调用AfxBeginThread(ThreadFun, 0),实现创建线程处理监听后客户端请求;5、关闭serverSocket;如上流程中,通过创建线.转载 2020-07-15 21:42:01 · 3273 阅读 · 0 评论 -
网络编程之TCP/UDP及其流程比较
https://www.cnblogs.com/chenxizhang/archive/2009/04/14/1435777.html转载 2020-07-16 09:47:21 · 196 阅读 · 0 评论 -
你得学会并且学得会的Socket编程基础知识
这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解。 本文源代码,可以通过这里下载 http://files.cnblogs.com/chenxizhang/SocketWorkshop.rar第一步:创建解决方案第二步:创建服务端程序 这里可以选择“Console Application”这个类型,比较方便调试然后编写如下代码,实现服务器的基本功能u...转载 2020-07-15 11:51:43 · 180 阅读 · 0 评论 -
# winform实现一个服务端和多个客户端进行通信
参看此链接 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 在上述代码的基础上进行了修改,包括一些捕获异常以及按钮的应用,扩充了一个listbox确保服务端可以选择和不同的客户端进行通信。服务器代码:using System;using System.Collections.Generic;using System.ComponentModel;using System...转载 2020-07-15 08:42:50 · 659 阅读 · 0 评论 -
C# 客户端判断服务器连接已断开
问题描述: 在C# Socket编程中,服务器端已经断开连接(发送数据方),客户端接收服务器端发送数据,在客户端使用client.Recieve()中,服务器端断开连接,客户端任然显示已连接状态问题解决: 使用C# Poll函数以下是实际中使用Poll的例子:仔细参考MSDN上的Select.Read说明,可知返回true的条件包括:有数据可读取、连接已关闭,重置或终止,因此可以判断连接终止或关闭的情况参考资料:http://...转载 2020-07-15 08:41:20 · 2663 阅读 · 0 评论 -
TCP通讯客户端怎样判断与服务器端断开,该如何处理
TCP通讯客户端怎样判断与服务器端断开 大虾们,神们,C# winform里面,采用多线程监听端口,接收方式为阻塞式,创建单一线程进行监听函数,这样阻塞时只阻塞单一线程,对主线程没有影响,并使用异步通信模式,来一个连接后回调函数进行解析入库。这是我的实现原理,目前有个问题,如何在客户端检测到与服务器断开,目前我只能做到写入TXT文档里面,看文档查看最后一次连接时间,如下: ------------------------告警信息2012-2-22 23:31:04----...转载 2020-07-14 17:14:21 · 3205 阅读 · 0 评论 -
服务器中判断客户端socket断开连接的方法
1, 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源。所以,必须等客户端先关闭Socket后,服务器端再关闭Socket才能避免TIME_WAIT状态的出现。 2, 在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号。client端通过 pipe 发送信息到server端后,就关闭client端, 这时server端,返回信...转载 2020-07-14 17:10:10 · 2421 阅读 · 0 评论 -
C#服务端判断客户端socket是否已断开的方法
注意:用本文的方法无法检测到意外情况下客户端断开,例如:网络断开,客户端程序异常退出。 刚开始,用Socket类的Connected属性来实现,却发现行不通,connected只表示 是在上次 还是 操作时连接到远程主机。如果在这之后[连接的另一方]断开了,它还一直返回true, 除非你再通过socket来发送数据。所以通过个属性来判断是行不通的! 后来有人说可以用Socket.Available属性来判断,Socket.Available表示获取已经从网络接收且可供读...转载 2020-07-14 17:04:07 · 3014 阅读 · 0 评论 -
C#利用服务器实现客户端之间通信
http://www.zzvips.com/article/51544.html转载 2020-07-14 16:52:54 · 1673 阅读 · 0 评论 -
C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能)
本文章向大家介绍C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能),主要包括C# TCPclient 服务器保持长连接的一种办法(变相的心跳包功能)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Draw...转载 2020-07-14 16:46:08 · 7162 阅读 · 1 评论 -
C# Socket之异步TCP客户端断线重连
本文章向大家介绍C# Socket之异步TCP客户端断线重连,主要包括C# Socket之异步TCP客户端断线重连使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 我们知道TCP通信是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低,它首先需要服务端开启服务,然后客户端才可以去连接,如果服务端没有开启通信服务或者连接之后再中途因为某些原因断开连接了,那么都是会通信失败的,所以我们这篇博客主要是对TCP...转载 2020-07-14 16:38:25 · 3805 阅读 · 0 评论 -
C#服务器客户端模型以及网络聊天室实例
本文章向大家介绍C#服务器客户端模型以及网络聊天室实例,主要包括C#服务器客户端模型以及网络聊天室实例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 实现了简单的聊天室功能,多个客户端连接一个服务器,客户端和服务器双向收发消息,服务器向所有用户广播消息服务器:主函数文件using System;using System.Collections.Generic;using System.Linq;using ...转载 2020-07-14 16:32:55 · 402 阅读 · 0 评论 -
C# socket异步通信服务器和客户端
本文章向大家介绍C# socket异步通信服务器和客户端,主要包括C# socket异步通信服务器和客户端使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。服务器代码 只要客户端连接进来就会接收到Server received datausing System;using System.Text;using System.Net.Sockets;using System.Net;class Program{ ///...转载 2020-07-14 16:28:44 · 858 阅读 · 0 评论