• Winsock网络编程笔记(1)----入门


    今天第一次接触winsock网络编程,看的资料是Windows网络编程第二版。通过博客记住自己的看书笔记。。

    在这里贴出第一个程序,虽然程序什么都没做,但以此作为入门,熟悉其网络编程风格。。

     1 #include"winsock2.h"
     2 #include<iostream>
     3 using namespace std;
     4 //This line is very important
     5 
     6 #pragma comment(lib,"ws2_32.lib")
     7 int main()
     8 {
     9     WSADATA wsaData;
    10     int Ret;
    11     //WSAStartup to initialize the Winsock version
    12     Ret = WSAStartup(MAKEWORD(2,2),&wsaData);
    13     if(Ret != 0)
    14     {
    15         cout<<"WSAStartup failed with error "<<Ret<<endl;
    16         return -1;
    17     }
    18     if (WSACleanup() == SOCKET_ERROR)
    19     {
    20         cout<<"WSACleanup failed with error "<<WSAGetLastError()<<endl;
    21         return -1;
    22     }
    23 
    24     return 0;
    25 }

     入门当然少不了的是概念。。所以在此也列举出今天看书遇到的几个陌生概念。。

    1. Big-endian:简单的记忆就是将一个数据的低位放在存储空间的高位地址;
    2. Little-endian:简单记忆就是讲一个数据的低位放在存储空间的低位地址(与人平常的思维模式一样);

      例:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为:
                    big-endian   little-endian
      0x0000        0x12         0xcd
      0x0001        0x23         0xab
      0x0002        0xab         0x34
      0x0003        0xcd         0x12

    3. 网络字节:网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之
                    间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
    4. 主机字节:主机字节序就是我们平常说的大端和小端模式,不同的 CPU 有不同的字节序类型,这些字节序是指整数在内存中保存的顺序 这个叫做主机序。

    有关主机字节和网络字节之间的相互转换如下:

    主机字节转换为网络字节:

    u_long htonl(u_long hostlong);
    int WSAHtonl(SOCKET s,u_long hostlong,u_long FAR* lpnetlong);
    u_short htonl(u_short hostshort);
    int WSAHtonl(SOCKET s,u_short hostshort,u_short FAR* lpnetshort);

    逆转换,网络字节转换为主机字节:

    u_long ntohl(u_long netlong);
    int WSANtohl(SOCKET s,u_long netlong,u_long FAR* lphostlong);
    u_short ntonl(u_short netshort);
    int WSANtonl(SOCKET s,u_short netshort,u_short FAR* lphostshort);

    下面的代码是演示有关网络中ip和port的初始化。。

     1 #include"winsock2.h"
     2 #include<iostream>
     3 using namespace std;
     4 //This line is very important
     5 
     6 #pragma comment(lib,"ws2_32.lib")
     7 int main()
     8 {
     9     WSADATA wsaData;
    10     int Ret;
    11     //WSAStartup to initialize the Winsock version
    12     Ret = WSAStartup(MAKEWORD(2,2),&wsaData);
    13     if(Ret != 0)
    14     {
    15         cout<<"WSAStartup failed with error "<<Ret<<endl;
    16         return -1;
    17     }
    18 
    19     //note the definition of SOCKADDR_IN
    20     SOCKADDR_IN InternetAdd;
    21     INT portID = 5016;//here we assume that the ip is 136.149.3.29,port is 5016
    22 
    23     InternetAdd.sin_family = AF_INET;//address family
    24     InternetAdd.sin_addr.s_addr = inet_addr("136.149.3.29");
    25     InternetAdd.sin_port = htons(portID);
    26     
    27     if (WSACleanup() == SOCKET_ERROR)
    28     {
    29         cout<<"WSACleanup failed with error "<<WSAGetLastError()<<endl;
    30         return -1;
    31     }
    32 
    33     return 0;
    34 }
  • 相关阅读:
    [学习笔记] php设计模式总结 [转]
    [学习笔记] Windows下搭建PHP开发环境[转载]
    [学习笔记] PHP中this,self,parent的区别 [转载]
    [学习笔记] mysql连接数据库[转]
    [学习笔记] Memcache [转载]
    [学习笔记] PHPUnit 使用方法 [转载]
    [学习笔记] 正则表达式30分钟入门教程 [转]
    [学习笔记] Linux软连接和硬链接 [转]
    HLSL Matrix变量的存储方式
    Hieroglyph3 框架分析2
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/3836423.html
Copyright © 2020-2023  润新知