1.头文件:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")//加载 ws2_32.dll
2.初始化dll:
WSADATA wsaData;
WORD sockVersion=MAKEWORD(2,2); //版本号2.2
if(WSAStartup(sockVersion,&wsaData))
{
AfxMessageBox(_T("failed to load winsock!"),MB_OK|MB_ICONSTOP);
return 0;
}
3.创建监听套接字:
SOCKET m_ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//SOCK_STREAM:TCP,SOCK_DGRAM:UCDP,IPPROTO_TCP:TCP,IPPROTO_IP:IP
4.绑定套接字:
SOCKADDR_IN m_ListensocketAddr;
m_ListensocketAddr.sin_family=AF_INET;//IPV4
m_ListensocketAddr.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1”);//IP地址
m_ListensocketAddr.sin_port=htons(8000);//端口号
bind(m_ListenSocket,(sockaddr*)&m_ListensocketAddr,sizeof(m_ListensocketAddr));
5.监听://server
listen(m_ListenSocket,50); //第二个参数为最多可以允许的等待未被处理的连接数
6.接收://server
SOCKET pClientSocket; //创建通信套接字
pClientSocket = ::accept(m_ListenSocket,(SOCKADDR*)&remoteAddr,sizeof(remoteAddr));
//成功返回非负数,失败返回-1
7.发送数据:
char *buff=”Hello World!”;
int iSend=send(m_ListenSocket,buff,strlen(buff)+sizeof(char),NULL);//成功返回正数
if(iSend == INVALID_SOCKET||iSend ==SOCKET_ERROR) //发送失败
8.建立连接://client
connect(m_VedioSocket,(sockaddr*)&m_VediosocketAddr,sizeof(m_VediosocketAddr))
9.接收数据://client
char szBuff[1024] = { 0 };
int nSockAddrSize = sizeof(m_ListensocketAddr);
if(recvfrom(s,szBuff,sizeof(szBuff),0,(sockaddr*)&m_ListensocketAddr,&nSockAddrSiz)>0)
10.关闭套接字:
if(m_ListenSocket!= INVALID_SOCKET)
closesocket(m_ListenSocket); //关闭线程之前先关闭套接字
11.终止dll:
WSACleanup();