zoukankan      html  css  js  c++  java
  • VC++ 网络编程总结(二)

    2、基本的Windows Socket API编程

    • 需要在程序中添加下面的包含语句:#include <winsock2.h>   #pragma comment( lib, "WS2_32" )
    • 使用Vc++编译时需添加编译链接依赖项ws2_32.lib库
    • 协议寻址

         在winsock中,应用程序通过Sockaddr_in 结构来指定IP地址和服务端口信息:

          sockaddr_in internetAddr;

          int nPortID = 5320;

          internetAddr.sin_family = AF_INET;

          internetAddr.sin_addr.s_addr = inet_addr(“202.202.42.88”);

          internetAddr.sin_port = htons(nPortID);

        ip地址不容易记忆,还提供了许多地址和名称解析函数如gethostbyname,gethostbyaddr等

    2.1常用函数

                                     2013-08-19_182929

    2.2 TCP实例应用

    =======客户端======

    #include <stdio.h>
    #include <winsock2.h>
    #pragma comment (lib,"WS2_32")
    
    int main(int argc, char* argv[])
    {
        SOCKET sock;
        struct sockaddr_in sa;
        int err;
        int servport = 5555;
        char buff[256];
    
        int len;
        WSADATA ws;
    
        //初始化WinSock
        if(WSAStartup(0x0101,&ws) != 0)
        {
            printf("WSAStartup() failed!
    ");
            exit(-1);
        }
    
        //创建套接字
        sock =socket(AF_INET,SOCK_STREAM,0);
        //定义服务器地址结构
        memset(&sa,0,sizeof(sa));
        sa.sin_family = AF_INET;
        sa.sin_port = htons(servport);
        sa.sin_addr.s_addr=inet_addr("127.0.0.1") ;
    
        //链接服务器
        err=connect(sock,(const sockaddr*)&sa,sizeof(sa));
    
        //接收欢迎词
        memset(buff,0,sizeof(buff));
        len =recv(sock,buff,sizeof(buff),0);
        printf("%s
    ",buff);
        closesocket(sock);
        WSACleanup();
        return 0;
    }

    =======服务器=======

    #include <stdio.h>
    #include <winsock2.h>
    #pragma comment (lib,"WS2_32")
    
    int main(int argc, char* argv[])
    {
        SOCKET servsock,clisock;
        struct sockaddr_in sa;
        struct sockaddr_in cliaddr;
        int servport = 5555;
        char buff[256];
        WSADATA ws;
        int len,err;
    
        //初始化Winsock
        if(WSAStartup(0X0101,&ws) != 0)
        {
            printf("WSAStartup() failed!
    ");
            exit(-1);
        }
        //创建套接字
        printf("Create Socket...
    ");
        servsock = socket(AF_INET,SOCK_STREAM,0);
    
        //填充服务器地址结构
        memset(&sa,0,sizeof(sa));
        sa.sin_family = AF_INET;
        sa.sin_port=htons(servport);
        sa.sin_addr.s_addr = inet_addr("127.0.0.1");
    
        //绑定套接字到服务器地址结构
        printf("Binding...
    ");
        err = bind(servsock,(const sockaddr*)&sa,sizeof(sa));
        
        if(err != 0)
        {
            fprintf(stderr,"Bind failed:%d
    ",WSAGetLastError());
            exit(-2);
        }
    
        //监听套接字
        printf("Listeing...
    ");
        err = listen(servsock,5);
        if(err != 0)
        {
            fprintf(stderr,"Listen failed:%d
    ",WSAGetLastError());
            exit(-3);
        }
    
        //等待连接请求
        printf("Waiting Request...
    ");
        len = sizeof(cliaddr);
        clisock =accept(servsock,(struct sockaddr*)&cliaddr,&len);
        printf("Accept Client:%s:%d",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
        
        sprintf(buff,"Welcome %s",inet_ntoa(cliaddr.sin_addr));
        send(clisock,buff,strlen(buff),0);
        closesocket(clisock);
        WSACleanup();
    
        return 0;
    }
  • 相关阅读:
    C#单例模式的实现再回顾
    智慧质证使用过程中的4个接口
    Amortized Analysis 均摊分析
    668. Kth Smallest Number in Multiplication Table
    1201. Ugly Number III
    1482. Minimum Number of Days to Make m Bouquets
    744. Find Smallest Letter Greater Than Target
    436. Find Right Interval
    50. Pow(x, n)
    29. Divide Two Integers
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3268443.html
Copyright © 2011-2022 走看看