功能很简单,支持发送和接收。适合初学者。
Socket_Zmy.h
#pragma once
#define _AFXDLL
#include "afxsock.h"
#include "afxwin.h"
class Socket_Zmy
{
public:
Socket_Zmy(void);
~Socket_Zmy(void);
int SendData(CString IP, int Port, void * Data,int DataLen);
int RecvData(int Port, char * Data, int DataLen);
};
Socket_Zmy.cpp
#include "Socket_Zmy.h"
Socket_Zmy::Socket_Zmy(void)
{
if (!AfxSocketInit())
{
AfxMessageBox("AfxSocketInit() Failed");
}
}
Socket_Zmy::~Socket_Zmy(void)
{
}
int Socket_Zmy::SendData(CString IP, int Port, void * Data,int DataLen)
{
SOCKET Socket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(Socket == INVALID_SOCKET)
{
AfxMessageBox("::socket() Failed");
}
sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons(Port);
servAddr.sin_addr.S_un.S_addr = inet_addr(IP);
if(::connect(Socket,(sockaddr*)&servAddr, sizeof(servAddr)) == -1)
{
AfxMessageBox("::connect() Failed");
return 0;
}
int len = ::send(Socket,(const char *)Data,DataLen,0);
::closesocket(Socket);
return len;
}
int Socket_Zmy::RecvData(int Port, char * Data, int DataLen)
{
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sListen == INVALID_SOCKET)
{
AfxMessageBox("::socket() Failed");
return 0;
}
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(Port);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(::bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR)
{
AfxMessageBox("::bind() Failed");
return 0;
}
if(::listen(sListen, 2) == SOCKET_ERROR)
{
AfxMessageBox("::listen() Failed");
return 0;
}
sockaddr_in remoteAddr;
int nAddrLen = sizeof(remoteAddr);
SOCKET sClient = 0;
while(sClient == 0)
{
sClient = ::accept(sListen,(SOCKADDR*)&remoteAddr, &nAddrLen);
if(sClient == INVALID_SOCKET)
{
AfxMessageBox("::accept() Failed");
}
continue;
}
int nRecv = ::recv(sClient,Data,DataLen,0);
if(nRecv > 0)
{
Data[nRecv] = '\0';
}
::closesocket(sClient);
::closesocket(sListen);
return 0;
}