zoukankan      html  css  js  c++  java
  • Windows套接字Socket函数

    1.使用套接字函数之前,先要加载套接字函数库:

        #include "Winsock2.h"
        #pragma comment(lib,"Ws2_32.lib")
    

    2.相关函数介绍:

    1)socket函数:

    socket函数用于创建一个套接字。语法如下:

    SOCKET socket(int af,int type,int protocal);

    参数说明:

    af:表示一个网络地址类型,通常为AF_INET,表示套接字在Internet域中通信。

    type:表示套接字类型。如果为SOCK_STREAM,表示流式套接字,如果为SOCK_DGRAM,表示数据报套接字。

    protocal:表示网络协议,通常为0,表示采用TCP/IP协议。

    例子:

            m_socket=socket(AF_INET,SOCK_DGRAM,0);    

    2)bind函数:

    bind函数用于将套接字绑定到一个已知的地址上。语法如下:

    int bind(SOCKET s,const struct sockaddr FAR* name,int namelen);

    参数说明:

    s:一个套接字。

    name:一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。通常,该结构随不同的协议而变化。例如,sockaddr_in结构表示TCP/IP协议下的地址。

    namelen:确定name缓冲区的长度。如果函数执行成功,返回值为0;否则为SOCKET_ERROR。

    例子:

    	hostent* phost=gethostbyname("");
    	char* localIP=inet_ntoa(*(struct in_addr*)*phost->h_addr_list);
    	sockaddr_in addr;
    	addr.sin_family=AF_INET;
    	addr.sin_addr.S_un.S_addr=inet_addr(localIP);
    	addr.sin_port=htons(5001);
    	m_socket=socket(AF_INET,SOCK_DGRAM,0);
    	if (m_socket==INVALID_SOCKET)
    	{
    		MessageBox("创建套接字失败!");
    	}
    	char* len="512";
    	if (setsockopt(m_socket,SOL_SOCKET,SO_SNDBUF,len,4)!=0)
    	{
    		MessageBox("设置失败!");
    	}
    	if (bind(m_socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
    	{
    		MessageBox("套接字绑定失败!");
    	}
    

    3)recvfrom函数

    recvfrom函数用于读取套接字数据。语法如下:

    recvfrom(SOCKET s,char FAR *buf,int len,int flags,struct sockaddr FAR *from,int FAR *fromlen);

    参数说明:

    s:表示待接受数据的套接字。

    buf:表示接受数据的缓冲区。

    len:表示缓冲区大小。

    flags:表示接受标记,可以为0,表示无特殊行为。

    sockaddr:用于记录发送方的地址信息。

    fromlen:表示sockaddr的大小。

    例子:

    	char* pData=new char[1024];
    	memset(pData,0,1024);
    	sockaddr_in addr;
    	int factsize=sizeof(sockaddr);
    	int ret=recvfrom(m_socket,pData,1024,0,(sockaddr*)&addr,&factsize);
    

    4)sendto函数

    sendto函数用于向指定地址发送数据。语法如下:

    sendto(SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen);

    参数说明:

    s:表示发送数据的套接字。

    buf:表示发送数据的缓冲区。

    len:表示缓冲区大小。

    flags:表示发送标记,可以为0,表示无特殊行为。如果为MSG_DONTROUTE,表示不要将发出的路由出去,如果为MSG_OOB,表示数据应该被带外发送。

    sockaddr:标识对方的地址信息。

    tolen:表示sockaddr的大小。

    例子:

         sockaddr_in addr;
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(m_ClientPort);
    	addr.sin_addr.S_un.S_addr=inet_addr(m_ClientP.GetBuffer(0));
    	int size=sizeof(addr);
    	char* pData="Confirm";
    	sendto(m_socket,pData,8,0,(sockaddr*)&addr,size);        
    

    摘自:Visual C++项目开发全程实录

  • 相关阅读:
    属性MyBank
    C#语法
    NTE与C#
    css3制作网页动画
    网页定位元素
    使用ADO.NET访问数据库
    连接查询和分组查询
    模糊查询和聚合函数
    习题集
    用sql语句操作数据
  • 原文地址:https://www.cnblogs.com/striver-zhu/p/4521660.html
Copyright © 2011-2022 走看看