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

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

 #include"winsock2.h"
#include<iostream>
using namespace std;
//This line is very important #pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsaData;
int Ret;
//WSAStartup to initialize the Winsock version
Ret = WSAStartup(MAKEWORD(,),&wsaData);
if(Ret != )
{
cout<<"WSAStartup failed with error "<<Ret<<endl;
return -;
}
if (WSACleanup() == SOCKET_ERROR)
{
cout<<"WSACleanup failed with error "<<WSAGetLastError()<<endl;
return -;
} return ;
}

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

  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的初始化。。

 #include"winsock2.h"
#include<iostream>
using namespace std;
//This line is very important #pragma comment(lib,"ws2_32.lib")
int main()
{
WSADATA wsaData;
int Ret;
//WSAStartup to initialize the Winsock version
Ret = WSAStartup(MAKEWORD(,),&wsaData);
if(Ret != )
{
cout<<"WSAStartup failed with error "<<Ret<<endl;
return -;
} //note the definition of SOCKADDR_IN
SOCKADDR_IN InternetAdd;
INT portID = ;//here we assume that the ip is 136.149.3.29,port is 5016 InternetAdd.sin_family = AF_INET;//address family
InternetAdd.sin_addr.s_addr = inet_addr("136.149.3.29");
InternetAdd.sin_port = htons(portID); if (WSACleanup() == SOCKET_ERROR)
{
cout<<"WSACleanup failed with error "<<WSAGetLastError()<<endl;
return -;
} return ;
}

Winsock网络编程笔记(1)----入门的更多相关文章

  1. Winsock网络编程笔记(4)----基本的理论知识

    前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsoc ...

  2. Winsock网络编程笔记(3)----基于UDP的server和client

    在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此 ...

  3. Winsock网络编程笔记(2)----基于TCP的server和client

    今天抽空看了一些简单的东西,主要是对服务器server和客户端client的简单实现. 面向连接的server和client,其工作流程如下图所示: 服务器和客户端将按照这个流程就行开发..(个人觉得 ...

  4. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  5. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  6. 网络编程懒人入门(六):深入浅出,全面理解HTTP协议

    本文引用了自简书作者“涤生_Woo”的文章,内容有删减,感谢原作者的分享. 1.前言 HTTP(全称超文本传输协议,英文全称HyperText Transfer Protocol)是互联网上应用最为广 ...

  7. Linux网络编程笔记(修订版)

    我的网络编程笔记, 因为最近又要做Linux下的网络编程,故重新修订, 其中一些内容参考了文末的链接及文章 1.   基本概念 2.   基本接口 2.1.   打开一个socket 2.2.   将 ...

  8. 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  9. WinSock网络编程基础(1)

    记录学习windows网络编程过程中遇到的问题和相关笔记 基本概念: Socket: socket起源于UNIX,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.基于&qu ...

随机推荐

  1. Lodop 动态加载模板,动态加载数据

    最近需要使用Lodop打印控件,所以就研究了一下,期间从网上找了诸多的东西,基本全是对HTML进行打印的,没有找到我想要的,就只好自己动手丰衣足食. 这篇文章主要讲述的是Lodop与数据的结合使用,官 ...

  2. Opengl4.5 中文手册—A

    因为opengl API 比较庞大,网络上还没有完整的.较新的opengl中文手册 这对很多人很不方便,所以整理了这一系列,用于帮助大家"快速浏览最新的opengl api" 为了 ...

  3. LINUX通过PXE自动部署系统

    原理介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的 ...

  4. 彻底弄懂AngularJS中的transclusion

    点击查看AngularJS系列目录 彻底弄懂AngularJS中的transclusion AngularJS中指令的重要性是不言而喻的,指令让我们可以创建自己的HTML标记,它将自定义元素变成了一个 ...

  5. JavaScript案例开发之扑克游戏

    随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢:闲话 ...

  6. .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限

    一.Linux下的文件目录 简介:linux的文件系统是采用级层式的树状目录结构,在此 结构中的最上层是根目录“/”,然后在此目录下再创建 其他的目录.深刻理解linux文件目录是非常重要的,如下图所 ...

  7. JSP获取input(含正则表达式)

    <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> < ...

  8. 在CentOS 7 上安装docker

    Docker CE Install yum-utils, which provides the yum-config-manager utility: $ sudo yum install -y yu ...

  9. C#仪器数据文件解析-RTF文件

    RTF格式文件大家并不陌生,但RTF文件的编码.解码却很难,因为RTF文件是富文本格式的,即文件中除了包含文本内容,还包含文本的格式信息,而这些信息并没有像后来的docx等采用XML来隔离格式和内容, ...

  10. Python面试题之copy/deepcopy详解

    copy和deepcopy有什么区别? http://blog.csdn.net/qq_32907349/article/details/52190796 http://iaman.actor/blo ...