给个WSASend 发包的例子 WSASend(....); 参数太多不懂调用比如我要给192.168.1.1的10000端口发送一个封包 数据为1234 请问大家该如何写 给我源代码好琢磨 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谷歌 关键字 :delphi WSASend MSDN的例子#include <winsock2.h>#include <ws2tcpip.h>#include <stdio.h>#include <stdlib.h>#define DATA_BUFSIZE 4096#define SEND_COUNT 10void __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;} 先找本书来看,把sockets的知识系统的学一遍,比如"windows网络编程" 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; 看這裡:http://topic.csdn.net/t/20021128/19/1214199.html dbgrid column实时模糊查询 activex控件的关联图标! 如何禁止一个窗口的最大化 出差ing,现在可以上网了,散分 请教一个观念上的问题! 结贴是什么意思? 继续请教,关于《实现按 Enter 键后,光标跳到下一控件》Thanks 怎样使用MSDE! 小问个语法问题,懂的人花个2分钟帮帮我吧,谢谢 delphi 如何设置导出到Excel某一单元格(一整行也可以)不自动换行, 真假?Delphi for iPhone 1.0 released! 关于SendMessage获取ListBox内容的问题
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>#define DATA_BUFSIZE 4096
#define SEND_COUNT 10void __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;
}