这几天真是纠结呀,写个东西给搞的乱七八糟,设计了一个线程池,一个启动线程,一个控制线程,另外还有个日志线程,启动的时候要跑13个线程--!
感觉自己的程序就像是一堆零件拼起来的粗制滥造的机器,莫名其妙的接口,咬合和传送,随时可能会崩溃。
在一大堆线程中,用同步,sleep,wait,notify,join等绕来绕去。3天以后,还是几个顽固的异常,程序偶尔抽筋,执行顺序不可控,我抓狂了。于是删了12个线程,只留下一个,发现也能满足系统需求。
很多时候,我们需要的不是一个能造各种各种规格各种长度各种直径棍子从绣花针到金箍棒的机器,而只需要一个能砸人脑袋的铁棍。
话说就这最后一个线程,还有的折腾。
关键是这个对象,ByteBuffer,SocketChannel唯一接收的读写对象。
先前有讲到,ByteBuffer这个对象很不好用。一个弄不好信息就没了。网上找了很多资料,最后才搞清楚是flip问题。原来这个对象内部保存一个类似指针和游标之类的东西,指示当前操作位置。写完数据以后,这个指针就停留在当前写的byte那,也就是整个byte[]的最末尾。然后再去读的时候,从指针这开始读,自然就读不到了。所以写完了调一下flip()方法,把这个指针给放回去,这样才能读到。
于是觉得,ByteBuffer真不是个东西,用一下还要这么复杂,而且这个方法的说明还写这么难懂,什么翻转,根本就不对。一边念叨着一边狠狠的加上flip(),写完了加,读完了加,用完了再加,多置几次也不会出错,多多益善。
而这个动作,带来了另外一个非常隐蔽非常致命的问题。
未完待续
分享到:
相关推荐
在深入理解了SuperSocket的核心概念和主要功能后,开发者可以通过提供的文档和示例代码,快速搭建自己的Socket服务器,并实现高效稳定的网络通信。通过不断实践和优化,可以充分利用SuperSocket的强大能力,构建出高...
【标题】"HPSocket.Net-develop_hpsocket.net_HPSocket_.net_socket_tcp_" 提供的知识点主要集中在使用C#编程语言实现基于TCP协议的Socket通信上,并且涉及到一个名为"HPSocket.Net"的库。HPSocket.Net是针对.NET...
2. **数据传输**:该工具提供发送和接收数据的功能,可以方便地进行文本或二进制数据的传输。这对于调试网络应用、测试协议兼容性或者进行快速的数据交换非常有用。 3. **协议支持**:SocketTool通常支持TCP(传输...
在.NET平台上,SuperSocket以其易于扩展和高度定制化的特性,成为了Socket多线程编程的一个优选方案。 **一、SuperSocket的核心特性** 1. **多线程支持**:SuperSocket采用了多线程模型来处理客户端的连接,确保了...
Socket池和Socket连接池是网络编程中的重要概念,主要用于提高应用程序的性能和效率。在处理大量并发网络连接时,传统的单个Socket连接方式可能会导致系统资源的过度消耗,因此引入了Socket池技术。 Socket,全称是...
2. **创建TCP客户端**:输入目标服务器的IP地址和端口号,SocketTool可以主动发起连接,用于测试服务器的响应。同样,你可以在此模式下发送和接收数据。 3. **模拟UDP通信**:UDP(User Datagram Protocol)是一种...
Socket 有两种类型:基于流的 Socket(Stream Socket)和基于数据报的 Socket(Datagram Socket)。 * 基于流的 Socket:使用 TCP 协议,提供可靠的、有序的、无损失的数据传输。例如,HTTP、FTP、TELNET 等协议都...
这个组件包括了静态库HPSocket.lib和动态库HPSocket_D.lib,以及一系列必要的头文件,使得开发者可以在自己的项目中方便地集成和使用HPSocket的功能。 HPSocket库的核心功能在于其对TCP/IP协议的支持,包括TCP...
在本主题中,我们将深入探讨Socket服务器和客户端的工作原理、实现步骤以及常见应用。 一、Socket基本概念 Socket,也被称为套接字,是网络通信的一种接口,允许应用程序通过网络发送和接收数据。在TCP/IP协议栈中...
2. **Session**: 表示一个客户端连接,包含了与客户端通信的所有信息,如Socket对象、客户端IP地址等,以及接收和发送数据的方法。 3. **Protocol**: 协议处理组件,负责解析接收到的数据并封装待发送的数据,可以...
2. **XML文件**:XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,具有良好的可读性和结构化特性。在C#中,我们可以使用`System.Xml`命名空间中的类来处理XML,例如`XmlDocument`用于加载和...
在cocos2d-x中,我们首先需要创建一个Socket对象,并指定服务器的IP地址和端口号。这通常包括以下步骤: 1. 初始化Socket:根据操作系统选择相应的Socket库,创建Socket实例。 2. 建立连接:调用connect()函数,传入...
接着,定义RawSocket类,包括error_occurred、KeepRunning、len_receive_buf、receive_buf_bytes和socket等参数。最后,实现构造函数,初始化变量参数。 C#raw Socket编程的应用场景: 1. 网络封包监视 2. 网络...
这款工具的强大之处在于它不仅提供了基础的端口监听功能,还支持Socket的二次开发,为程序员和网络管理员提供了更广阔的定制空间。 在TCP协议中,SocketTool能够帮助用户建立可靠的、面向连接的通信链路。TCP协议...
2. `socket.cpp`:实现文件,实现了Socket类的功能,如创建、绑定、监听、连接、发送和接收数据等。 3. `platform.h`:平台检测和适配的头文件,用于根据当前运行的操作系统选择适当的实现。 4. `win_socket.cpp` 和...
2. **客户端连接**:在Java或Android应用中,导入`socket.io-client`库,初始化客户端,指定服务器地址和端口,然后使用`socket.connect()`建立连接。 3. **事件监听与发送**:客户端和服务器都可以监听和发送...
本文将深入探讨如何在Cocos2dx3.x中使用Socket创建服务端和客户端。 首先,理解Socket的基本概念至关重要。Socket,又称为套接字,是网络通信中的接口,允许应用程序通过它发送和接收数据。在C++中,我们可以使用...
Socket测试工具是网络编程中非常重要的辅助软件,主要用于检测和调试基于Socket协议的网络通信问题。Socket,也称为套接字,是应用层与传输层之间的接口,它允许应用程序通过TCP/IP协议进行数据交换。在开发网络应用...
首先,Socket在C++中主要是通过`<winsock2.h>`和`<ws2tcpip.h>`这两个库来使用的,它们提供了与操作系统底层网络服务交互的API。在开始编写任何代码之前,需要确保正确地引入这些头文件,并使用`WSAStartup`函数初始...