Socket客户端动态库程序

1、头文件 ClientDll.h

#ifndef CLIENTDLL_H
#define CLIENTDLL_H
#define DLLEXPORT __declspec(dllexport)
#define DLLIMPORT __declspec(dllimport)

#include <winsock2.h>
#pragma comment (lib,"ws2_32.lib")//winsock使用的库函数

extern "C" DLLEXPORT bool InitSocket();

extern "C" DLLEXPORT char * SendToServer(char sendbuf[], int nBuf);

#endif

2、源文件 ClientDll.cpp

#include "ClientDll.h"

SOCKET m_socket;
bool InitSocket()
{
	int ERR;
	WORD wVersionRequested;
	WSADATA wsadata;
	
	SOCKADDR_IN sockaddr_client;
	wVersionRequested = MAKEWORD(2,2);
	ERR = WSAStartup(wVersionRequested,&wsadata);
	if(ERR != 0)
	{
		return false;
	}
	m_socket = socket(AF_INET,SOCK_STREAM,0);

	//初始化套接字地址
	sockaddr_client.sin_family = AF_INET;
	sockaddr_client.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	sockaddr_client.sin_port = htons(61001);

	//向服务器发送建立连接请求
	int ret = connect(m_socket,(sockaddr *)&(sockaddr_client),sizeof(sockaddr_client));
	if(ret!=0)
	{
		return false;
	}
	return true;
}

char *  SendToServer(char sendbuf[], int nBuf)
{
	char recvbuf[1024]={0x00};
	int nSendLen, nRecvLen;
	nSendLen = send(m_socket, sendbuf, nBuf, 0);
	if(nSendLen == nBuf)
	{
		nRecvLen = recv(m_socket, recvbuf, 1024, 0);
	}
	return recvbuf;
}

BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
	switch(fdwReason)
	{
	case DLL_PROCESS_ATTACH:
		{
			InitSocket();
			char sendbuf[1024]={0x00};
			char *recvbuf=NULL;
			memset(sendbuf,0x00, sizeof(sendbuf));
			strcpy(sendbuf, "1234");
			recvbuf = SendToServer(sendbuf, 4);
		}
	case DLL_PROCESS_DETACH:
		{
		}
		break;
	}
	return	TRUE;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这是我自己编写的 测试好使通过 //======================================================================== //绑定协议栈-TCPServer mode //======================================================================== int dllBindTCPSockServer(SOCKADDR_IN pSockAddr,RECV_DATA_CALLBACK DataCallBack, VOID* pContext) { int res = 0; //Create Socket if(glb_SockTCPServer!=NULL) { OutputDebugString("套接字已存在!"); return -1; } glb_SockTCPServer = socket(AF_INET,SOCK_STREAM,0); //Create Socket res = WSAGetLastError(); if(res) { glb_SockTCPServer = NULL; OutputDebugString("套接字建立失败!"); return res; } pSockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); pSockAddr.sin_family=AF_INET; pSockAddr.sin_port = htons(pSockAddr.sin_port); res = bind(glb_SockTCPServer,(SOCKADDR*)&pSockAddr,sizeof(SOCKADDR)); if(res) { OutputDebugString("绑定失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("绑定成功!"); res = listen(glb_SockTCPServer,5); if(res) { OutputDebugString("监听失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("开始网络监听..."); //Register RecvDataCallBackServer glb_lpFunCallBackTCPServer = DataCallBack; glb_pContext = pContext; //Create ListenThread UINT (WINAPI * pFnStartAddr)(LPVOID); pFnStartAddr = WinSockListenThread; glb_WinSockListenThread = (HANDLE)_beginthreadex(NULL, 0, pFnStartAddr, NULL, 0,//0 for running, CREATE_SUSPENDED NULL); if (glb_WinSockListenThread==NULL) { OutputDebugString("创建监听线程失败!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; glb_WinSockListenThread = NULL; return -2; } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feng_blog6688

只需一个赞,谢谢你的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值