当前位置: 首页 > news >正文

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 }

 

 

转载于:https://www.cnblogs.com/LCCRNblog/p/3836423.html

相关文章:

  • php中body下出现莫名空白字符
  • 关于ios 运行时 介绍的比较详细的帖子
  • IIS应用程序池监控
  • 理解 backbone.js 中的 bind 和 bindAll 方法,关于如何在方法中指定其中的 this,包含apply方法的说明...
  • 距离变换DT
  • 2-3. 逆序的三位数(10)
  • 发布/订阅消息传送模型
  • android 永不关闭toast
  • ZOJ 2770 Burn the Linked Camp(spfabellman)
  • Frontend Development
  • hdoj 1686 kmp
  • CCS教程
  • windows安装配置mongodb及图形工具MongoVUE
  • iOS中的NSBundle常用方法
  • JAVA static 作用
  • conda常用的命令
  • Effective Java 笔记(一)
  • es的写入过程
  • python docx文档转html页面
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 从重复到重用
  • 构建工具 - 收藏集 - 掘金
  • 聊一聊前端的监控
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端临床手札——文件上传
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何在 Tornado 中实现 Middleware
  • 少走弯路,给Java 1~5 年程序员的建议
  • 使用common-codec进行md5加密
  • 由插件封装引出的一丢丢思考
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #define
  • #大学#套接字
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (LeetCode 49)Anagrams
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)创业的注意事项
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net wcf memory gates checking failed
  • .NET面试题(二)
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • ::前边啥也没有
  • @Autowired @Resource @Qualifier的区别
  • @Service注解让spring找到你的Service bean
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [20171102]视图v$session中process字段含义
  • [20181219]script使用小技巧.txt
  • [COI2007] Sabor