QT网络编程【二】【Socket】
1.QT中添加socket 库的相关操作
2.正常c++11 VS2019使用socket库的操作
3.winsock2 与 sys/socket.h的区别?
4.WinSock2 的基本操作?
详细步骤与实现源码参考1:[]:https://blog.csdn.net/jump0123/article/details/110237949
参考2:[]:https://www.jianshu.com/p/afb4237a5674
5.socket的创建
参数的说明[]:http://t.zoukankan.com/MyselfDancing-p-3660167.html
参数:
domain:即协议域,又称为协议族(family)。常用的协议族有,AF_INET、AF_INET6、AF_LOCAL等;
type:指定socket类型。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET等等;
protocol:指定协议。常用的协议有,IPPROTO_TCP、IPPTOTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等。当protocol为0时,会自动选择type类型对应的默认协议。
发现无论如何找都找不到这些这个库的源码
6.socket到底是什么?
参考网址[]:https://mp.weixin.qq.com/s/U7GR7hbUJBK_yzB4vaC6TQ
这个问题真的很让人困扰。
每个解释的博客或者是推文似乎都用着同一套让人完全听不懂的说辞。
直至找到这篇比较有头有尾的说明。
socket(套接字)就是把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
socket就是一组简单的接口,谁的接口? TCP/IP协议簇的接口。
不同进程间通信需要用到IPC,同一主机的还好说(用PID标识),不同主机的只能通过网络。TCP/IP 协议簇 完成了这项任务。网络层的ip协议能够确定主机地址,而传输层的协议加端口可以确定主机应用程序(进程)。 三元组(IP地址,协议,端口号)就能标识网络进程。socket起源于UNIX,“一切皆文件”的体现。
socket就是一类特殊的文件。操作模式就是open-read/write-close 。
7.winsock与socket的区别与联系?
对winsock的讲解更是抽象,只要提到winsock 百度上全是马上教你如何简易实现TCP、UDP的C/S模型 。
[]:https://mp.weixin.qq.com/s/-J3rDK_LbYXATQRSTzON9w
[]:https://wenku.baidu.com/view/f3d66cfe04a1b0717fd5dd3f.html 这个也不错
便于理解,这里是Linux的网络解读[]:https://developer.aliyun.com/article/801566
终于是有个比较听得懂的解说。
winsock就是微软用socket 开发的一个网络编程的相关函数,是Windows下的网络编程接口。
里面还有对具体代码的剖析(指winsock实现源码,而不是应用源码) 泪目
8.如何实现C/S?
在弄明白了6,7之后,我觉得变得开朗许多。
只需要掌握基本框架就行。C/S很好搭。
SOCKADDR_IN 具体有些什么
【百度百科有细节讲解】[]:https://baike.baidu.com/item/SOCKADDR_IN/3917215?fr=aladdin
sockaddr_in 首先得提到sockaddr
sockaddr 里的成员就是确定了套接字地址家族和协议家族
但是编程过程一般不对着sockaddr 进行操作(原因未知)而是用一个等价的数据结构进行操作:SOCKADDR_IN
在winsock2.h中是这么定义的
struct sockaddr_in {
short sin_family; ///*Address family一般来说AF_INET(地址族)PF_INET(协议族)*/
u_short sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/
struct in_addr sin_addr;/*IP address in network byte order(Internet address)*/
char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/
};
//in_addr 又是什么呢?
typedef struct in_addr
{
union{
struct { unsigned char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { unsigned short s_w1,s_w2; } S_un_w;
unsigned long S_addr;
}S_un;
}in_addr;
10.INADDR_ANY指什么?
INADDR_ANY就是指定地址为0.0.0.0的地址,这个地址事实上表示不确定地址,或“所有地址”、“任意地址”。 一般来说,在各个系统中均定义成为0值。
用于服务器端监听不确定的地址 而不是用于客户端
11.有几个转换函数得掌握
参考网址:[]https://blog.csdn.net/Lurora0/article/details/117413828
转换ip地址的有5个
inet_addr(); //功能是将一个点分十进制的IP转换成一个长整型数
//inet_addr方法可以转化字符串,主要用来将一个十进制的数转化为二进制的数,用途多于ipv4的IP转化。
参考网址[]:https://blog.csdn.net/myyllove/article/details/83380209
转换端口的函数有4种
参考网址讲得比较详细 包括说为什么需要这个函数的转换。
可以考虑自己实现其中一种函数就更能理解 与转换对象有关,而且还与工作机器的字节序有关。
12.有几个宏定义得掌握:
AF_INET
13.浅浅地发现一个bug
关于connect卡死的问题
[]:http://t.zoukankan.com/gjianw217-p-6297023.html
QT网络编程【二】【Socket】的更多相关文章
- QT 网络编程二(UDP版本)
QT的UdpSocket接收消息使用原则 第一步:new一个UdpSocket 第二步:调用UdpSocket的bind方法,同时指定端口号 第三步:使用connect将接收消息函数和UdpSocke ...
- python 网络编程:socket(二)
上节地址:Python网络编程:socket 一.send和sendall区别 send,sendall ret = send('safagsgdsegsdgew') #send 发送 ...
- Qt网络编程-书接上文,浅谈TCP文件收发,以及心跳包
qt网络编程-书接上文,浅谈文件收发 上文Qt网络编程-从0到多线程编程中谈到 在qt中的qtcpsocket通讯的用法,接下来浅谈一下关于tcp通讯的实际应用,当然了由于是浅谈,也不能保证其功能的完 ...
- Linux网络编程(二)
Linux网络编程(二) 使用多进程实现服务器并发访问. 采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来 ...
- java基础-网络编程(Socket)技术选型入门之NIO技术
java基础-网络编程(Socket)技术选型入门之NIO技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传统的网络编程 1>.编写socket通信的MyServer ...
- Qt网络编程QTcpServer和QTcpSocket的理解
前一段时间通过调试Qt源码,大致了解了Qt的事件机制.信号槽机制.毕竟能力和时间有限.有些地方理解的并不是很清楚. 开发环境:Linux((fedora 17),Qt版本(qt-everywhere- ...
- C#网络编程:Socket编程
套接字简介:套接字最早是Unix的,window是借鉴过来的.TCP/IP协议族提供三种套接字:流式.数据报式.原始套接字.其中原始套接字允许对底层协议直接访问,一般用于检验新协议或者新设备问题,很少 ...
- Linux高并发网络编程开发——10-Linux系统编程-第10天(网络编程基础-socket)
在学习Linux高并发网络编程开发总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. 10-Linux系统编程-第10天(网络编程基础-socket) 在学习Li ...
- 网络编程与socket套接字
网络编程与socket套接字 传输层 PORT协议 port是一种接口,数据通过它在计算机和其他设备(比如打印机,鼠标,键盘或监视器)之间,网络之间和其他直接连接的计算机之间传递 TCP协议 传输 ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
随机推荐
- 为什么 A 能 ping 通 B,B 却不能 ping 通 A ?
有开发小哥咨询了一个问题,记录一下处理过程分享给有需要的朋友. 问题如下: A.B 两台开发服务器连接交换机,并且 A.B 两台服务器的 IP 地址设置为同一个网段,却发现 A 能 ping 通 B ...
- HarmonyOS基础
目录 自适应布局 自适应拉伸布局 自适应缩放 自适应延伸 组件多态 ArkUI开发框架 基础组件 Text组件和Span组件 参考 参考:harmonyos3: 鸿蒙ArkUI eTS教程配套源码 参 ...
- javax.naming.NameNotFoundException: Name [aa.bb.cc/xx] is not bound in this Context. Unable to find [aa.bb.cc]
今天尝试把一个SpringBoot项目由jdk11转移为jdk8,在IDEA里运行一切正常.打包,部署到tomcat启动后,在客户端调用WebSocket出现如下异常: java.lang.Illeg ...
- H5在(支付宝和微信环境)使用支付
首先是在支付宝浏览器环境 使用支付宝支付 参考链接 https://myjsapi.alipay.com/jsapi/native/trade-pay.html 支付宝订单字符串唤起支付 调用支 ...
- TODOList小黄条
TODOList http://www.yynote.cn/ 总结 windows中的神器
- VUE学习-生命周期
生命周期 函数 描述 beforeCreate 在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用. created 在实例创建完成后被立即 ...
- mongoDB日常操作02
db.TABLE_NAME.find({<query>})//普通查询db.TABLE_NAME.find({<query>},{'_id':0,'f1':1,'f2':1}) ...
- ConcurrentHashMap在Java8中的变化
增加红黑树这个存储结构 在Java8中,为什么要增加红黑树这种数据结构来进行存储,而不是全部使用链表来进行存储呢? 1.因为攻击者可以构造大量具有相同hashCode的内容,使其全部放在同一个列表中, ...
- Astra-20190405
Usage: astra.py [-h] [-c COLLECTION_TYPE] [-n COLLECTION_NAME] [-u URL] [-headers HEADERS] [-method ...
- holiday07
第七天 grep常用的两种模式查找 参数 含义 ^a 行首,搜寻以a开头的行 ke$ 行尾搜寻以ke结束的行 echo 文字内容 echo会在终端显示指定参数的文字,通常会和重定向 联合使用 重定向& ...