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))

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

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

  1. C++ Socket学习记录 -2

    WinSock TCP 编程流程 TCP通信,就像是固定电话,首先是要安装基站,然后是将电话号绑定到电话,然后拨号,接通之后说事,完事之后还要挂电话(甭管谁先挂). 1.初始化环境 使用函数 int ...

  2. C++ Socket学习记录 -3

    WinSocket套接字之间的数据传输 在客户端和服务端建立链接后,接着就是在套接字之间传输数据. 很简单的使用 recv 接收数据,用send发送数据,单但是出现一个问题,不管接收还是发送,数据都是 ...

  3. [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …

    [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...

  4. zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP

    阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库  http://download.zeromq.org ...

  5. Java 8 学习记录

    Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...

  6. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  7. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  8. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  9. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

随机推荐

  1. web前段学习2017.6.15

    CSS---表现层,修饰和表现html文档,为了解决结构层和表现层分离的问题. 通过CSS极大的提高了工作效率,方便工作人员维护和管理CSS:层叠样式表,目前用的最广泛的css版本为css2,最新版本 ...

  2. Linux进程/内核模型

    内核必须实现一组服务和相应的接口,应用程序则可以使用这些接口,而不是直接与硬件打交道. Linux内核主要由以下5个子系统组成:进程调度.内存管理.虚拟文件系统.进程间通信以及设备驱动. 在这个组成中 ...

  3. vijos1051题解

    题目: 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. 轰隆隆--烟花响起(来自中国的浏阳花炮之乡).接下来就 ...

  4. [BZOJ2783/JLOI2012]树 树上倍增

    Problem 树 题目大意 给出一棵树,求这个树上的路径的数量,要求路径上的点权和等于s且路径的上每个点深度不同. Solution 这个题目可以用不少方法做. 首先,路径上每个节点的深度不同决定了 ...

  5. Python爬虫从入门到放弃(十四)之 Scrapy框架中选择器的用法

    Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中选择节点的语言,也可以用在HTM ...

  6. ThinkPhp框架:分页查询和补充框架知识

    上一篇的随笔写的是基本操作,现在可以做一些高级操作,例如有条件的查询数据,有分页的条件查询数据 一.一个条件的查询数据 查询数据自然是先要显示出数据,然后根据条件进行查询数据 (1)显示出表的数据 这 ...

  7. ftp站点密码破解

    启动流光软件,在"F T P 主机"点击鼠标右键选择"编辑 | 添加",然后添加想要利用的那个 F T P 地址,然后在弹出的对话框添加欲利用的主机,FTP 主 ...

  8. javascript数组(1) ——sort的工作原理及其他数组排序方法

    一说到数组排序,最直观的想法就是用sort啊! 请问不用使用sort方法还可以使用什么方法进行数组排序? 比如 :  快速排序法.合并排序法.冒泡排序法.选择排序法.插入排序法.布尔排序法.交互排序. ...

  9. 搭建私有Docker Registry

    Docker官方提供了用于搭建私有registry的镜像,并配有详细文档. 官方Registry镜像:https://hub.docker.com/_/registry 官方文档:https://do ...

  10. (转)Linux(Centos)之安装Java JDK及注意事项

    场景:天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣.人之为学有难易乎?学之,则难者亦易矣:不学,则易者亦难矣. 1 准备工作 下面配置jdk的方式在具有root权限时候能够执行.如果没有ro ...