`
pcajax
  • 浏览: 2192246 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

csdn中一篇sock 经验贴..

阅读更多

这几天编一个点对点的传输程序,一个服务端,很多客户端,之间传输大量的图像数据,本来写好后感觉没有问题,可是测试的时候,总是报一些乱七八遭的错误,
最后发现一个小问题,在这里说出来,希望对用sock传输的哥们有点帮助:
Socket.SendBuf(SendBuf^, li_ESendSize),sendbuf是我定义的指针,在发出这个
命令后,不能立即FreeMem(sendbuf)释放sendbuf,因为这时有可能还没有将所有内容发出去,所以如果要将内存块发送出去,最好是将buf定义为公共变量,分配好内存,在sock的read事件中对用buf读要发送的内容,在sendbuf发送,等到程序退出时再去释放buf
我以前的程序
           ...
            GetMem(SendBuf, li_ESendSize);
            PRFS_SendFile.ReadBuffer(SendBuf^, li_ESendSize);
            Socket.SendBuf(SendBuf^, li_ESendSize);
            FreeMem(ls_SendBuf);
         ...
改后为

            PRFS_SendFile.ReadBuffer(SendBuf^, li_ESendSize);
            Socket.SendBuf(SendBuf^, li_ESendSize);
将getmem放在了窗体打开的事件中
FreeMem(ls_SendBuf)放在close事件中。

什么是非阻塞方式?
一旦服务器与客户端建立了连接之后,就可以通过 Internet 传输数据和文件。但是在WinSock中存在两种传输模式“阻塞”和“非阻塞”的概念。

  一般都采用非阻塞方式。在客户端,如果把 ClientType特性设置为ctNonBlocking,表示采用非阻塞方式进行连接。当服务器端 Socket试图进行读/写操作的时候,客户端 Socket就会得到通知,即OnRead或者OnWrite事件。

  对于服务器端Socket来说,如果把ServerType特性设置为 StNonBlocking,表示采取非阻塞方式进行连接。当客户端 Socket试图进行读/写的时候,服务器端Socket就会得到通知,即OnClientRead或者OnClientWrite事件。

  与非阻塞方式不同的是,在阻塞方式下没有诸如OnRead或者OnWrite等异步事件。Socket必须主动去读或者写数据。在读写操作完成之前,其他代码都无法执行,成为了纯粹的独占使用方式,整个应用程序将处于等待状态,大大降低应用程序的性能。

  对于客户端Socket来说,如果把 ClientType特性设置为ctBlocking,表示采取阻塞方式进行连接,为了尽可能的减少阻塞方式的负面影响,可以把所有涉及到读写的操作放在一个单独的线程中,这样可以使其他的线程可以继续得到执行。

  对于服务器端 Socket来说,如果把ServerType设置为stThreadBlocking,表示采取阻塞方式进行连接。Delphi 中将为每一个阻塞方式的连接自动分配一个新的线程,这样即使一个客户正在进行读写操作,其他的客户也不必等待

分享到:
评论

相关推荐

    soft_用ASP操作SOCK的组件.zip.zip

    标题中的“soft_用ASP操作SOCK的组件.zip.zip”表明这是一个关于使用ASP(Active Server Pages)编程语言来操作SOCK(套接字)组件的压缩文件。ASP是一种微软公司的服务器端脚本环境,用于创建动态网页或Web应用程序...

    nodejs-web应用监听sock文件实例.doc

    nodejs-web应用监听sock文件实例.doc

    web socket全套资源(jquery+stomp.min.js+sock.min.js)

    WebSocket是Web应用中实现双向通信的关键技术,它允许服务器与客户端之间进行实时、低延迟的数据交换,极大地丰富了Web交互体验。在这个资源包中,包含了`jquery.js`、`sockjs.min.js`和`stomp.min.js`这三个关键的...

    sock学习资料.rar

    本文将深入探讨“sock学习资料”所涵盖的关键知识点,包括socket的基本概念、工作原理、使用场景以及常见编程接口。 一、Socket基本概念 Socket,通常被称为套接字,是网络通信中的一个抽象概念,它提供了进程间...

    linux_sock_raw.rar_RAW_linux sock raw_原始套接字

    本资料“linux_sock_raw.rar”详细介绍了如何在Linux系统中使用原始套接字进行编程,以实现更底层的网络通信功能。 一、原始套接字的概念 原始套接字是一种特殊类型的网络套接字,它允许用户绕过操作系统对网络...

    SOCK_RAW.rar_RAW_SOCK_R_SOCK_RAW Pi_sock_raw_windows SOCK_R

    本篇文章将深入探讨`SOCK_RAW`的概念、其在Windows环境下的应用以及如何使用C++编写一个简单的ping程序。 首先,让我们了解什么是`SOCK_RAW`。`SOCK_RAW`是套接字API(Socket Application Programming Interface)...

    ACE_SOCK_TCP.rar_ACE_ACE TCP C++_ACE tcp_ace-6

    《ACE_SOCK_TCP.rar:ACE库在C++中实现TCP通信详解》 ACE(Adaptive Communication Environment)是一个跨平台的、开源的C++库,它为分布式系统开发提供了丰富的网络编程接口。ACE库的设计目标是简化异构网络环境中...

    dlp.sock.scanner.zip_IP段扫描_Scanner _dlp_ip 扫描

    标题中的“dlp.sock.scanner.zip_IP段扫描_Scanner _dlp_ip 扫描”指的是一款基于DLP(Data Loss Prevention,数据丢失防护)技术的IP段扫描工具,可能是一个通过socket编程实现的扫描器,用于检测网络中特定IP段的...

    C/C++ sock新手进阶编程.chm

    1.网络通信原理和协议结构 1.1网络通信原理 1.2网络七层结构介绍 1.3常见tcp/ip协议结构定义 2.SOCK 详解 2.1网络理论/结构 2.2IP 处理 2.3SOCK套接字 2.4SOCK 函数 3.协议通信 ... 4.SOCK应用 ...

    sock5 server.rar

    GO语言开发,系统兼容性非常好,性能强悍,访问视频网站都是不到2%的CPU和不到10M不到的内存消耗。

    sock-transmit.rar_sock传送文件

    作为一个程序员,使用这些现有的协议传送文件相当简单,不过,它们只适用于服务器模式中。这样,当我们想在点与点之间传送文件就不适用了或相当麻烦,有一种大刀小用的意味。笔者一直想寻求一种简单有效,且具备多...

    计算机软件-编程源码-超强超完善的pb-SOCK网络源码.zip

    标题中的“pb-SOCK网络源码”指的是使用Protocol Buffers(简称pb)和Socket编程的网络通信源代码。Protocol Buffers是Google开发的一种数据序列化协议,它允许开发者定义数据结构,然后生成能够读写这些结构的代码...

    API_SOCKET.rar_API sock_API. socket_API_SOCKET_api socket_socket

    套接字分为两种类型:流式套接字(SOCK_STREAM,如TCP)和数据报套接字(SOCK_DGRAM,如UDP)。流式套接字提供面向连接的服务,确保数据的顺序和可靠性;而数据报套接字则是无连接的,适合于需要快速传输但对数据...

    sock32.dll vc源代码

    《sock32.dll VC源代码解析与应用》 sock32.dll是Windows操作系统中的一个动态链接库(Dynamic Link Library),它提供了对Winsock 2 API的支持,主要用于网络通信。Winsock,简称为“Windows Sockets”,是Windows...

    tun2sock v1.3.rar_Tun2Socks_rough1l3_throwaiz_tun2sock_tun2sock

    Tun2Socks for Windows

    windows sock server.

    Windows Sock Server是一种在Windows操作系统上运行的网络服务器软件,主要功能是提供SOCKS(Socket Secure)代理服务。SOCKS是一种协议,允许应用程序通过代理服务器与互联网上的其他服务器进行通信。它在网络安全...

    Sock工具.zip

    这个“Sock工具.zip”文件包含了三个关键组件:sockcomm.dll动态链接库、SockClient.exe客户端应用程序以及SockServer.exe服务器应用程序。这些文件共同构成了一个简洁且便携的网络通信测试环境。 1. **Socket基础*...

    ubuntu vps安装docker报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.问题解决

    在Ubuntu VPS上安装Docker时,可能会遇到一个常见的错误:“Cannot connect to the Docker daemon at unix:///var/run/docker.sock.” 这个问题通常是由于Docker守护进程未运行或者是由于Linux内核版本过低导致的。...

    win10网络注册表.zip

    "win10网络注册表.zip" 是一个压缩文件,包含了两个修复网络问题的注册表文件:sock.reg 和 sock2.reg。这些文件可能用于解决用户因误操作注册表而引发的网络连接错误。 1. **注册表编辑器**:在Windows中,注册表...

    sockjs.min.js

    sockjs.min.js WebSocket开发必备

Global site tag (gtag.js) - Google Analytics