• 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;
    }
  • 相关阅读:
    POJ 2756 Autumn is a Genius 大数加减法
    RoboGuice注入框架简单应用
    Android 从相冊获取近期拍摄的多张照片(获取相机拍照所存储的照片)
    不可不知的DIP、IoC、DI以及IoC容器
    Codeforces Round #156 (Div. 2)---A. Greg&#39;s Workout
    zend framework将zip格式的压缩文件导入并解压到指定文件
    TreeSet排序
    Bee Framework_百度百科
    duck
    anglehack参赛总结
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3268443.html
Copyright © 2020-2023  润新知