windows网络套接字编程总结

1.sockaddr_in,in_addr

struct sockaddr_in{
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
inet_addr("127.0.0.1"):将点分十进制形式转换为32位整数

inet_ntoa():和上面的功能正好相反,将整形数转换成点分十进制形式。

in_addr.sin_addr.s_addr=inet_addr("172.0.0.1");

printf("Address: %s\n", inet_ntoa(sa.sin_addr));

函数inet_addr的作用其实就是把"127.0.0.1"这样的字符串ip地址转换成0x0100007F这样的32位整数。 
sin_addr其实是个4字节联合体,S_addr是它的int模式。 
inet_ntoa接受的类型就是in_addr所以就直接传sin_addr了
上面的s和in其实分别代表socket和internet。

参考:http://zhidao.baidu.com/question/87513972.html

2.套接字连接基本结构:

int connect()

{

         WSADATA wsadata;

         struct sockaddr_in sock_addr;

         HOSTENT *phostent;/*该结构记录主机的信息,包括主机名、别名、地址类型、地址长度和地址列表。之所以主机的地址是一个列表的形式,原因是当一个主机有多个网络接口时,自然有多个地址。*/

         struct in_addr inaddr;

         if(WSAStartup(MAKEWORD(1,1),&wsadata)<0)

         {

                   //MessageBox(NULL,_T("WSAStartup Error!"),_T("connect() Error!"),MB_OK);

                   m_error=WSA_INIT_ERROR;

                   return m_error;

         }

         /*---------------根据域名获取网络地址,存放在struct in_addr----------------*/

         phostent=gethostbyname(m_server);//smtp.163.com

         if(phostent!=NULL)

         {

                   // lpAddr=phostent->h_addr_list[0];

                   memmove(&inaddr,phostent->h_addr_list[0],4);//220.181.12.101

         }

         else

         {

                   //MessageBox(NULL,_T("gethostbyname Error!"),_T("connect() Error!"),MB_OK);

                   m_error=CONNECTSERVER_ERROR;

                   return m_error;

         }

         /*---------------根据域名获取网络地址,存放在struct in_addr----------------*/

 

         s=socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);//SOCK_STREAM SOCK_DGRAM

         sock_addr.sin_family=AF_INET;

         sock_addr.sin_port=htons(m_port);

         sock_addr.sin_addr=inaddr;//直接结构体赋值给结构体,或者写成:sock_addr.sin_addr.s_addr=inaddr.S_un.S_addr;

        

         if(::connect(s,(struct sockaddr *)&sock_addr,sizeof(sock_addr)))

         {

                   //MessageBox(NULL,_T("connect Error!"),_T("connect() Error!"),MB_OK);

                   m_error=CONNECT_ERROR;

                   return m_error;

         }

         return 0;

}

套接字发送接受信息基本结构:

         int rcpttoCount = m_rcpttoList.size();

         while(rcpttoCount>0)

         {

                   sprintf(m_sendbuff,"%s%s%s","rcpt to:<",m_rcpttoList[--rcpttoCount].c_str(),">\r\n");

                   if(senddata()!=0)

                   {

                            return m_error;

                   }

                   if(recvdata()!=0)

                   {

                            return m_error;

                   }

                   if(strncmp(m_recvbuff,"250",3)!=NULL)

                   {

                            m_error=RCPT_TO_ERROR;

                            return m_error;

                   }

         }

int senddata()
{
 int idx = 0;
 int csend;
 int count;
 if(m_sendCount==0)
  count=strlen(m_sendbuff);
 else
  count=m_sendCount;
 while(count>0)
 {
  if((csend=send(s,m_sendbuff+idx,count,0))==SOCKET_ERROR)
  {
   m_error =WSA_SEND_ERROR;
   return 0;
  }
  if(csend==0)
  {
   break;
  }
  count-=csend;
  idx+=csend;
 }
 if(m_sendCount!=0)
  m_sendCount=0;
 return 1;
}

int recvdata()
{
 int crecv;
 crecv=recv(s,m_recvbuff,MAX_LENGTH,0);

 if(crecv==SOCKET_ERROR)
 {
  m_error = WSA_RECV_ERROR;
  return 0;
 }
 else if(crecv==0)
 {
  m_error = WSA_RECV_ERROR;
  return 0;
 }
 else
 {
 }
 return 1;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《TCP/IP网络互连技术.卷Ⅲ.客户/服务器编程和应用(Windows套接字版)》是一本介绍TCP/IP网络编程以及客户/服务器应用的技术指南,主要针对使用Windows套接字进行网络编程的开发人员。该书总结了TCP/IP的基本原理、协议和常见应用,提供了丰富的示例代码和实用的案例,帮助读者快速掌握网络编程和客户/服务器应用的开发。 该书首先介绍了TCP/IP网络协议栈的结构和工作原理,讲解了套接字编程的基本概念和使用方法。然后,作者详细讲解了Windows平台上的套接字编程API,包括套接字的创建、绑定、监听、连接、发送和接收等操作。读者可以通过学习这些API,了解如何在Windows环境下进行网络编程。 接下来,该书介绍了常见的客户/服务器模型,并通过实例演示了如何开发客户/服务器应用。读者可以学习如何在服务器端创建套接字并监听客户端的连接请求,同时也可以学习如何在客户端创建套接字并与服务器建立连接。通过这些实例,读者可以了解服务器端和客户端之间的通信过程,以及如何处理多个客户端的并发连接。 此外,该书还介绍了如何实现简单的网络协议,如HTTP、FTP和SMTP等。通过详细的实例代码,读者可以学习到如何解析和生成这些协议的数据包,以及如何进行相应的网络通信。 总的来说,《TCP/IP网络互连技术.卷Ⅲ.客户/服务器编程和应用(Windows套接字版)》是一本适合想要学习TCP/IP网络编程和客户/服务器应用开发的读者的技术指南。通过学习这本书,读者可以深入了解网络编程的基本原理和技术,并能够使用Windows套接字进行网络应用的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值