go中引用socket库 ws2_32

来源:互联网 发布:台达触摸屏编程手册 编辑:程序博客网 时间:2024/05/22 05:22

#cgo windows,amd64 LDFLAGS: -lWS2_32



引用的C头部添加上面这个  写个例子


package main/*#cgo windows,amd64 LDFLAGS:  -lWS2_32#include <windows.h>#include <stdio.h>#include "define.h"#include <windows.h>#define host "127.0.0.1"#define port 5556#pragma comment(lib, "ws2_32.lib")void socket_def(SOCKET *sock, char *host_t, int port_t){    WSADATA wsaData;    struct sockaddr_in saddr;    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)    {        printf("error");    }    saddr.sin_family = AF_INET;    saddr.sin_port = htons(port_t);    saddr.sin_addr.s_addr = inet_addr(host_t);    *sock = socket(AF_INET, SOCK_DGRAM, 0);    if (*sock == INVALID_SOCKET)    {        printf("socket initialize failed: %d/n", WSAGetLastError());    }}int  get_process_info(){    HANDLE        hDevice;    int        status;    HANDLE        m_hCommEvent;    ULONG        dwReturn;    char        outbuf[255];    CHECKLIST    CheckList;    SOCKET sock;   WSADATA wsaData;    struct sockaddr_in saddr;    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)    {        printf("error");    }    saddr.sin_family = AF_INET;    saddr.sin_port = htons(port_t);    saddr.sin_addr.s_addr = inet_addr(host_t);    sock = socket(AF_INET, SOCK_DGRAM, 0);    hDevice = NULL;    m_hCommEvent = NULL;    hDevice = CreateFile("\\\\.\\MyEvent",        GENERIC_READ | GENERIC_WRITE,        FILE_SHARE_READ | FILE_SHARE_WRITE,        NULL,        OPEN_EXISTING,        FILE_ATTRIBUTE_NORMAL,        NULL);    if (hDevice == INVALID_HANDLE_VALUE)    {        printf("createfile wrong\n");        getchar();        return 0;    }    m_hCommEvent = CreateEvent(NULL,        0,        0,        NULL);    printf("hEvent:%08x\n", m_hCommEvent);    status = DeviceIoControl(hDevice,        IOCTL_PASSEVENT,        &m_hCommEvent,        sizeof(m_hCommEvent),        NULL,        0,        &dwReturn,        NULL);    if (!status)    {        printf("IO wrong+%d\n", GetLastError());        getchar();        return 0;    }    CheckList.ONLYSHOWREMOTETHREAD = TRUE;    CheckList.SHOWTHREAD = TRUE;    CheckList.SHOWTERMINATETHREAD = FALSE;    CheckList.SHOWTERMINATEPROCESS = FALSE;    status = DeviceIoControl(hDevice,        IOCTL_PASSEVSTRUCT,        &CheckList,        sizeof(CheckList),        NULL,        0,        &dwReturn,        NULL);    if (!status)    {        printf("IO wrong+%d\n", GetLastError());        getchar();        return 0;    }    printf("      [Process Name]    [PID]    [TID]    [Parent Process Name]    [PID]    [TID]\n");    while (1)    {        ResetEvent(m_hCommEvent);        WaitForSingleObject(m_hCommEvent, INFINITE);        status = DeviceIoControl(hDevice,            IOCTL_PASSBUF,            NULL,            0,            &outbuf,            sizeof(outbuf),            &dwReturn,            NULL);        if (!status)        {            printf("IO wrong+%d\n", GetLastError());            getchar();            return 0;        }        printf("%s", outbuf);        sendto(sock,outbuf,strlen(outbuf),0,(struct sockaddr *)&saddr,sizeof(saddr));    }    status = DeviceIoControl(hDevice,        IOCTL_UNPASSEVENT,        NULL,        0,        NULL,        0,        &dwReturn,        NULL);    if (!status)    {        printf("UNPASSEVENT wrong+%d\n", GetLastError());        getchar();        return 0;    }    status = CloseHandle(hDevice);    status = CloseHandle(m_hCommEvent);    getchar();    return 0;}*/import "C"import ("net""fmt")func main() {C.get_process_info()var localaddress,_=net.ResolveUDPAddr("udp",":5556")var udplistener,err=net.ListenUDP("udp",localaddress)if err!=nil{fmt.Print("error")return}defer  func(){udplistener.Close()}()     var buf[255]byten,_,err:=udplistener.ReadFromUDP(buf[0:])if err!=nil{fmt.Print("dd")return}fmt.Print(string(buf[0:n]))}

监听到进程启动通过socket发送给指定的端口。

0 0
原创粉丝点击