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))
这样,客户端与服务器之间的链接就建立了,接下来需要做的就是怎么样在服务端与客户端通信(数据的传输)
C++ Socket学习记录 -1的更多相关文章
- C++ Socket学习记录 -2
WinSock TCP 编程流程 TCP通信,就像是固定电话,首先是要安装基站,然后是将电话号绑定到电话,然后拨号,接通之后说事,完事之后还要挂电话(甭管谁先挂). 1.初始化环境 使用函数 int ...
- C++ Socket学习记录 -3
WinSocket套接字之间的数据传输 在客户端和服务端建立链接后,接着就是在套接字之间传输数据. 很简单的使用 recv 接收数据,用send发送数据,单但是出现一个问题,不管接收还是发送,数据都是 ...
- [Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source …
[Python 学习]2.5版yield之学习心得 - limodou的学习记录 - limodou是一个程序员,他关心的焦点是Python, DocBook, Open Source - [Pyth ...
- zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP
阅读zeromq guide的一些学习记录 zeromq官方例子 在VC下运行会有些跨平台的错误 我这里有做修改 稍后会发布出来 相关的代码与库 http://download.zeromq.org ...
- Java 8 学习记录
Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...
- Quartz 学习记录1
原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...
- Java 静态内部类与非静态内部类 学习记录.
目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...
随机推荐
- 最长非降子序列的O(n^2)解法
这次我们来讲解一个叫做"最长非下降子序列"的问题及他的O(n^2)解法. 首先我们来描述一下什么是"最长非下降子序列". 给你一个长度为n的数组a,在数组a中顺 ...
- vijos1037题解
题目: 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念"9?11"事件,Mr.F决定自己用水晶来搭建一座双塔. Mr. ...
- Docker快速入门
Docker已经火了很长一段时间,最近打算在阿里云上好好熟悉一下Docker的相关应用,为今后的工作做准备. 基本概念 Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初发起者是do ...
- spring注解@service("service")括号中的service有什么用
相当于 xml配置中得 bean id = service 也可以不指定 不指定相当于 bean id = com. service.service 就是这个类的全限定名 好处是:同一个接口可以有多个 ...
- 包装类、数组、string类浅析及练习
String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2); //返回true Strin ...
- Spring 自定义注解,配置简单日志注解
java在jdk1.5中引入了注解,spring框架也正好把java注解发挥得淋漓尽致. 下面会讲解Spring中自定义注解的简单流程,其中会涉及到spring框架中的AOP(面向切面编程)相关概念. ...
- Java代码优化六大原则
单一职责 代码优化第一步,单一职责原则 (Single Responsibility Principle).对于一个Java类,应该仅有一个引起它变化的原因,也就是说,一个类中,应该是一组相关性很高的 ...
- java加减的二进制实现
Java中整数基本类型有byte,short,int,long,大小分别为1.2.4.8个字节,一个字节大小为8位,也就是8个二进制码(0/1)组成. 计算机中二进制码分为原码,反码,补码.在计算机中 ...
- (转)@ContextConfiguration注解说明
场景:学习spring实战中相关的单元测试 1 正常使用 @ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 1.1 单个文件 @ContextC ...
- Object-C 里面的animation动画效果,核心动画
#import "CoreAnimationViewController.h" @interface CoreAnimationViewController ()@property ...