热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

给个WSASend发包的例子

WSASend(.);参数太多不懂调用比如我要给192.168.1.1的10000端口发送一个封包数据为1234请问大家该如何写给我源代码好琢磨
 WSASend(....); 参数太多不懂调用

比如我要给192.168.1.1的10000端口发送一个封包 数据为1234 请问大家该如何写 给我源代码好琢磨

12 个解决方案

#1


网上有很多例子的,楼主搜索一下。

#2


谷歌 关键字 : delphi  WSASend

#3


MSDN
都有例子

#4


 不懂怎么建立套接字 就是第一个参数不懂 网上的例子都没见到完整的

#5


MSDN的例子


#include 
#include 
#include 
#include 

#define DATA_BUFSIZE 4096
#define SEND_COUNT   10

void __cdecl main() 
{
    WSADATA wsd;
    struct addrinfo *result = NULL,
        hints = {0};
    WSAOVERLAPPED SendOverlapped = {0};
    SOCKET ListenSocket = INVALID_SOCKET,
        AcceptSocket = INVALID_SOCKET;
    WSABUF DataBuf;
    DWORD SendBytes, Flags;
    char buffer[DATA_BUFSIZE];
    int err, rc, i;

    // Load Winsock
    rc = WSAStartup(MAKEWORD(2,2), &wsd);
    if (rc != 0) {
        fprintf(stderr, "Unable to load Winsock: %d\n", rc);
        return;
    }

    // Initialize the hints to obtain the 
    // wildcard bind address for IPv4
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    rc = getaddrinfo(NULL, "27015", &hints, &result);
    if (rc != 0) {
        fprintf(stderr, "getaddrinfo failed: %d\n", rc );
        return;
    }

    ListenSocket = socket(result->ai_family, 
        result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        fprintf(stderr, "socket failed: %d\n", 
            WSAGetLastError());
        freeaddrinfo(result);
        return;
    }

    rc = bind(ListenSocket, result->ai_addr, 
        (int)result->ai_addrlen);
    if (rc == SOCKET_ERROR) {
        fprintf(stderr, "bind failed: %d\n", 
            WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        return;
    }

    rc = listen(ListenSocket, 1);
    if (rc == SOCKET_ERROR) {
        fprintf(stderr, "listen failed: %d\n", 
            WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        return;
    }

    // Accept an incoming connection request
    AcceptSocket = accept(ListenSocket, NULL, NULL);
    if (AcceptSocket == INVALID_SOCKET) {
        fprintf(stderr, "accept failed: %d\n", 
            WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        return;
    }

    printf("Client Accepted...\n");

    // Create an event handle and setup an overlapped structure.
    SendOverlapped.hEvent = WSACreateEvent();
    if (SendOverlapped.hEvent == NULL) {
        fprintf(stderr, "WSACreateEvent failed: %d\n", 
            WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        closesocket(AcceptSocket);
        return;
    }

    DataBuf.len = DATA_BUFSIZE;
    DataBuf.buf = buffer;

    for(i=0; i < SEND_COUNT ;i++) {

        rc = WSASend(AcceptSocket, &DataBuf, 1, 
            &SendBytes, 0, &SendOverlapped, NULL);
        if ( (rc == SOCKET_ERROR) && 
                (WSA_IO_PENDING != (err = WSAGetLastError()))) {
            fprintf(stderr, "WSASend failed: %d\n", err);
            break;
        }

        rc = WSAWaitForMultipleEvents(1, &SendOverlapped.hEvent, TRUE, INFINITE, TRUE);
        if (rc == WSA_WAIT_FAILED) {
            fprintf(stderr, "WSAWaitForMultipleEvents failed: %d\n", WSAGetLastError());
            break;
        }

        rc = WSAGetOverlappedResult(AcceptSocket, &SendOverlapped, &SendBytes, FALSE, &Flags);
        if (rc == FALSE) {
            fprintf(stderr, "WSASend operation failed: %d\n", WSAGetLastError());
            break;
        }

        printf("Wrote %d bytes\n", SendBytes);

        WSAResetEvent(SendOverlapped.hEvent);

    }

    WSACloseEvent(SendOverlapped.hEvent);
    closesocket(AcceptSocket);
    closesocket(ListenSocket);
    freeaddrinfo(result);

    WSACleanup();

    return;
}



#6


O(∩_∩)O~,来学习下。

#7


也想研究这个,难,,,

#8


先找本书来看,把sockets的知识系统的学一遍,比如"windows网络编程"

#9


谢谢 是要先看下书,不然都没有头绪

#10


只看的懂delphi 闷

#11


try:

procedure TForm1.SendCommand(); var k :Integer; str :string; SendBytes : DWORD; errorCode :Integer; PerIoData :LPPER_IO_OPERATION_DATA; lphEvents :LPWSAEVENT; dwFlags :DWORD; begin str := Trim(edtCommand.Text) + chr($D); dwFlags := 0; New(PerIoData); ZeroMemory(@(PerIoData.Overlapped), sizeof(OVERLAPPED)); ZeroMemory(@(PerIoData.Buffer), DATA_BUFSIZE+1); for k:= 1 to Length(str) do PerIoData.Buffer[k-1] := str[k]; PerIoData.DataBuf.buf := @PerIoData.Buffer; PerIoData.DataBuf.len := length(str); PerIoData.Overlapped.hEvent := WSACreateEvent(); if (WSASend(m_socket, @(PerIoData.DataBuf), 1, @SendBytes, dwFlags, @(PerIoData.Overlapped), nil) = SOCKET_ERROR) then begin if (WSAGetLastError() <> ERROR_IO_PENDING) then Memo1.Lines.Add('WSASend() failed'); end; lphEvents := @PerIoData.Overlapped.hEvent; if WSAWaitForMultipleEvents(1, lphEvents, True, WSA_INFINITE, False)= WSA_WAIT_EVENT_0 then begin self.Memo1.Lines.Add('WSASend() success'); .....开始调用WSARecv接收命令的返回值..... end else Memo1.Lines.Add('WSASend() failed'); end;
 

#12


看這裡:

http://topic.csdn.net/t/20021128/19/1214199.html

推荐阅读
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 具备括号和分数功能的高级四则运算计算器
    本研究基于C语言开发了一款支持括号和分数运算的高级四则运算计算器。该计算器通过模拟手算过程,对每个运算符进行优先级标记,并按优先级从高到低依次执行计算。其中,加减运算的优先级最低,为0。此外,该计算器还支持复杂的分数运算,能够处理包含括号的表达式,提高了计算的准确性和灵活性。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 蓝桥杯算法实战:节点选取策略优化分析
    本文针对蓝桥杯算法竞赛中的节点选取策略进行了深入分析与优化。通过对比不同节点选择方法的效果,提出了基于贪心算法和动态规划的综合优化方案,旨在提高算法效率和准确性。实验结果表明,该优化策略在处理大规模数据集时表现出色,显著提升了算法性能。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
author-avatar
隐姓埋名er
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有