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 }

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

时间: 2024-11-08 06:21:55

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

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

前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsock的基本理论知识,由于是一篇笔记,鉴于看书速度有限,主要内容会慢慢地填入..错误在所难免的,希望看客更正..(*^__^*) 嘻嘻…… Winsock网络编程笔记(4)----基本的理论知识,布布扣,bubuko.com

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

在上一篇随笔中,对Winsock中基于tcp面向连接的Server和Client通信进行了说明,但是,Winsock中,Server和Client间还可以通过无连接通信,也就是采用UDP协议.. 因此,这一篇随笔也简单的列举基于UDP的Server和Client的实现.. 和基于TCP的实现相比,其主要的不同点包括: ①接收端(简单地说就是服务器)/发送端(简单地说就是客户端)在创建Socket时候,参数要选择SOCK_DGRAM, IPPROTO_UDP: ②接收端不需要调用listen和ac

linux网络编程笔记——TCP

1.TCP和UDP TCP是长连接像持续的打电话,UDP是短消息更像是发短信.TCP需要消耗相对较多的资源,但是传输质量有保障,UDP本身是不会考虑传输质量的问题. 2.网络传输内容 我习惯的做法是直接通过TCP传送结构体,当然前提是收发两端都在程序里对目标结构体有充分的定义.特别说明的一点是,要小心收发两端处理器的大小端问题!而且传输信息头里必须包含长度信息,而且通用的是大端.但是,这里的长度和结构体,我选择用小端进行传输. 3.TCPserver实现 参考了别人多线程的回调写法,看起来不错.

linux网络编程笔记——UDP

目前这部分代码会出现阻塞问题,暂时尚未解决 #include "udp.h" #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <malloc.h> #include <sys/types.h> #include <sys/socket

Java网络编程笔记5

在Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子. 接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的Socket建立一个线程,并通过它进行通信. 在这里创建一个线程类用来管理Socket: <span style="font-size:18px;">public class ServerThread extends Thread { private Socket socket;

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门

1.前言 即时通讯网整理了大量的网络编程类基础文章和资料,包括<TCP/IP协议 卷1>.<[通俗易懂]深入理解TCP协议>系列.<网络编程懒人入门>系列.<不为人知的网络编程>系列.<P2P技术详解>系列.<高性能网络编程>系列.甚至还有图文并貌+实战代码的<NIO框架入门>等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然.尤其现在移动网络大行其道的时代,在网络环境如此复杂的

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

1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步发布于:http://www.52im.net/thread-2067-1-1.html) 2.关于作者 翟志军,个人博客地址:https://showme.codes/,Github:https://github.com/zacker330.感谢作者的原创分享. 作者的另一篇<即时通讯安全篇(七)

WinSock网络编程基础(1)

记录学习windows网络编程过程中遇到的问题和相关笔记 基本概念: Socket: socket起源于UNIX,Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.基于"打开—读/写—关闭"模式,其中WinSock就是变种之一 以下是一个典型的C/S中使用套接字接口的概述: WinSock: WinSock是Windows平台下的网络编程接口,它是基于Unix下的BSD Socket发展而来,是一个与网络协议无关的编程接口. WinSock目前有两个版本: W

WinSock网络编程基础(2)客户端

接下来说一下如何用WinSock创建基于TCP/IP模型的客户端和服务器. TCP可以提供两个计算机间可靠无误的数据传输,应用程序使用TCP通信时,会在两台计算机之间建立一个虚拟连接,连接之后计算机之间变可以以双向字节流进行数据交换. 下面说下简单的发送数据的客户端实现. 创建客户机的连接比较简单: 1.创建一个套接字,定义addrinfo对象并初始化这些值(该对象包含一个sockaddr结构) struct addrinfo *result = NULL, *ptr = NULL, hints