zoukankan      html  css  js  c++  java
  • C++网络编程简单的WinSock代码

    //注意要引用WinSock2的lib文件,否则编译不会通过
    #include <WINSOCK2.H>
    #include <stdio.h>

    int main(int argc,char** argv)
    {
     WSADATA wsaData;
     char HostName[256];
     hostent* HostEnt;
     protoent* ProtoEnt;
     in_addr** Addr;
     char* IPAddr;
     SOCKET Socket;
     sockaddr_in Sin;
     SOCKET AcceptSocket;
     
     //初始化WinSock
     if(WSAStartup(MAKEWORD(2,2),&wsaData))
     {
      printf("Init WinSock failed!\n");
      return 1;
     }

     //获取主机名
     gethostname(HostName,256);
     printf("%s\n",HostName);

     //获取主机信息
     HostEnt=gethostbyname(HostName);
     printf("%s\n",HostEnt->h_name);
     
     //枚举主机IP地址列表
     Addr=(in_addr**)HostEnt->h_addr_list;
     while(*Addr)
     {
      IPAddr=inet_ntoa(**Addr);
      printf("%s\n",IPAddr);
      Addr++;
     }

     
     //建立Socket
     
     ProtoEnt=getprotobyname("TCP");
     
     Socket=socket(AF_INET,SOCK_STREAM,ProtoEnt->p_proto);

     if(Socket<0)
     {  
      printf("Socket error!");
      return 2;
     }

     
     //绑定Socket
     Sin.sin_port=htons(23);
     Sin.sin_family=AF_INET;
     Sin.sin_addr.s_addr=0;

     if(bind(Socket,(sockaddr*)&Sin,sizeof(Sin)))
     {
      printf("%s\n","Socket error!");
      return 3;
     }

     //侦听请求
     if(listen(Socket,1))
     {
      printf("%s","Socket error!");
      return 4;
     }
     
     //
     while (1)
     {
      AcceptSocket=SOCKET_ERROR;
      while(AcceptSocket==SOCKET_ERROR)
      {
       AcceptSocket=accept(Socket,(sockaddr*)&Sin,NULL);
         }
      printf( "Client Connected.\n");
      break;
     }

     char msg[]="\r\n==Connected!==\r\n";

     printf("%d\n",send(AcceptSocket,msg,strlen(msg),0));

     //关闭Socket收发功能
     shutdown(AcceptSocket,0);

     closesocket(AcceptSocket);
     closesocket(Socket);

     //取消被阻塞的Socket
     if(WSAIsBlocking()) WSACancelBlockingCall();
     
     //释放WinSock资源
     WSACleanup();
     
     return 0;
    }

  • 相关阅读:
    浏览器输入一个url到整个页面显示出来经历了哪些过程?
    ajax
    为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
    jQuery中ready方法的实现
    this+call、apply、bind的区别与使用
    内存泄漏、垃圾回收机制、哪些情况会导致内存泄漏
    浏览器同源策略和跨域方法
    node.js
    JS原型、原型链、构造函数、实例与继承
    JS常用操作节点的方法
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/933689.html
Copyright © 2011-2022 走看看