C++ Socket学习记录 -1

1、IP的转换

  1)正转换  

    结构 sockaddr_in 在C++ 中表明一个IP地址结构,包含地址家,端口以及IP地址等信息

    如:

    sockaddr_in addr;
    addr.sin_family = AF_INET;    //指定地址家族 AF_INET 表明是TCP/IP 协议
        addr.sin_port = htons(1230);    //指定端口

    //在设置地址时,需要将点十进制地址转换为网络直接顺序

    //在较早时使用函数 inet_addr 进行转换

    //较新版本中,可以使用新函数 inet_pton 进行转换:

    int rnum = inet_pton(AF_INET,"127.0.0.1", &addr.sin_addr);

    使用 inet_pton 转化时,第一个参数为地址族,第二个参数为欲转换的点十进制IP,转换结果保存在第三个参数中,返回值 rnum ,转换成功时返回一个正数。

    if (rnum > 0 )

    {

      Printf ("转换成功!");

    }

  2)逆转换

    也可以将网络字节顺序反转化为点十进制地址

    使用函数 inet_ntop

    char ipStr[20];

    inet_ntop(AF_INET,(void*)&addr.sin_addr,ipStr,sizeof(addr));

    将转化结果保存到 ipStr (为 char* 也就是字符串)中。

2、套接字 socket 的绑定

   1)创建套接字

    CSocket Sokt;

   2)套接字的绑定

    创建套接字后,需要将其绑定到特定的IP及端口,才能使用该套接字。

    套接字的绑定 BOOL Sokt.Bind((SOCKADDR*)lpAddr,int len)

    其中 lpAddr 为地址结构(类型为 SOCKADDR*),len 为地址结构长度

    则地址绑定可以写为

    Sokt.Bind((SOCKADDR*)addr,sizeof(addr));

    注:

      在绑定中 SOCKADDR 也表示地址结构,它与 sockaddr_in 的区别在于,sockaaddr_in 用于储存地址信息,而 SOCKADDR 是在使用过程中的类型(如函数传递时的参数),至于为什么这么设计,战术还没弄明白……感觉挺闹心的,在传递参数时直接将 sockaaddr_in 转换为 SOCKADDR即可。

   3)监听和链接

     在套接字绑定到特定IP和端口后,对于

     服务器端,需要使用 Listen 进行监听;客户端 则可以 使用Connect 链接服务器

     //服务器监听

     Sokt.Listen(5); //参数 5 表示同时监听的链接数,取值范围 1~5,,默认为 5

     //客户端链接

     Sokt.Connect((SOCKADDR*)&addr, sizeof(addr))

这样,客户端与服务器之间的链接就建立了,接下来需要做的就是怎么样在服务端与客户端通信(数据的传输)

时间: 2024-08-10 05:16:25

C++ Socket学习记录 -1的相关文章

Android socket 学习记录 之 执行new socket(ip, port)程序崩溃

这段时间在学习Android的socket编程,我不是专做APP的,做的是bootloader.驱动.hal.framework这个线的,也就是系统搭建和功能优化设计.为了打通这整条线,为此学习了不少东西,今天把Android的socket学习记录一下,以防止以后会出现这样的低级错误. 我这里是在极客学院的源码基础上做的自己的一些添加和修改,学习开始不就是先会修改么,举一反三,自然就很快学会了.由于看过视频和资料后就迫不及待的按照自己的想法想做一个功能,但是遇到麻烦了,就是执行new socke

C++ Socket学习记录 -3

WinSocket套接字之间的数据传输 在客户端和服务端建立链接后,接着就是在套接字之间传输数据. 很简单的使用 recv 接收数据,用send发送数据,单但是出现一个问题,不管接收还是发送,数据都是以 char* 形式储存在缓存区的,如果有一个CString 对象,那么该怎么办呢? 很自然的就想到了把 CString 转换为 char* : CString cstr = "Hello Client!"; char * chr = (LPSTR)cstr.GetBuffer(); ::

Python学习记录-socket编程

Python学习记录-socket编程 学习 python socket Python学习记录-socket编程 1. OSI七层模型详解 2. Python socket 3. socket()函数 4. TCP socket通信流程 5. Python Internet 模块 1. OSI七层模型详解 以上图见:http://blog.csdn.net/yaopeng_2005/article/details/7064869 其它详情可参考:socket网络基础 2. Python sock

salt的api学习记录(一)

现在终于开始学习salt的api了,有些小激动啊,我们执行命令的时候,后台到底是如何处理的,发生什么了事情,我对着一切有着强烈的好奇心啊. 这些是saltstack命令对应的api: salt  --->salt.client.LocalClient  salt-cp  --->salt.cli.cp.SaltCP  salt-key --->salt.key.KeyCLI salt-call --->salt.cli.caller.caller salt-run --->s

socket学习及各类错误码(部分转)

如果本地有多个网卡(即多个ip),要指定本地发送网卡,则在建立的socket上bind所指定的网卡进行connect和send操作.例子程序如下: #include <stdio.h>#include "WinSock2.h"#pragma comment(lib,"ws2_32.lib") SOCKET tcp_socket;SOCKADDR_IN tcpAddr;const int BufLen=1024;char SendBuf[BufLen];

Linux学习记录--文件管理相关系统编程

文件管理相关系统编程 重要文件标识 打开文件标识 O_RDONLY:只读方式打开 O_WRONLY:只写方式打开 O_RDWR:可读写方式打开 打开文件操作副标识 O_CREAT:若路径中文件不存在则创建,使用Open函数时需同时指定文件权限 O_EXCL:若与O_CREAT连用,检查文件是否已经存在,若不存在则建立文件存在则返回错误,这使创建和测试成为一个原子操作 O_APPEND:读写文件从文件尾部开始移动,所有写入数据都加入文件尾部 O_TRUNC:若文件存在并且可以写入,此标识会将源文件

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe