c++ 网络编程基础
c++ 网络编程
标签(空格分隔): c++
建立socket
int socket(int domain,int type ,int protocol);
- domain 通常为PF_INET,表示互联网协议(TCP/IP)
- type 指定了Socket的类型 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
- protocol 通常赋值为0
绑定socket
int bind(int scokfd,struct sockaddr *MyAddr,int AddrLen);
scokfd Socket()函数返回的Socket套接字
MyAddrr 指向含有本机IP地址及端口号的sockaddr类型的指针
- sockaddr
struct sockaddr{
unsigned short as_family;//地址族,AF_xxx
char sa_data[14]; //14字节的协议地址
}
* **sa_family** 一般为*AF_INET*,代表TCP/IP
* **sa_data** 包含socket的IP地址和端口号
- sockaddr_in 这个结构更加通用,与socketaddr结构体类似,且他们的指针可以互相替代
struct sockaddr_in{
short int sin_family;//地址族
unsignedshort int sin_port;//端口号
struct in_addr sin_addr;//IP地址
unsigned char sin_zero[8];//填充0,以与 struct sockaddr大小保持一致
}
* **sin_family** 必须设置为*AF_INET*
* **sin_port** 端口号
* **sin_addr** 一个unsigned long的IP地址
* **sin)zero** 填充0,用于与sockaddr大小保持一致
注意sin_port和sin_addr需要转换成网络字节优先顺序
建立连接
面向连接的客户端程序可以使用Connect函数来配置Socket,从而与远端服务器建立一个TCP连接,其函数原型为:
int connect(int sockfd, stuct sockaddr *serv_addr ,int addrlen);
- sockfd socket()函数返回的socket套接字
- serv_addr 包含远端主机的IP地址和端口号的指针
- addrlen 远端地址结构的长度
- 当连接失败时,返回-1,并且设置错误信息
监听
服务器端程序调用listern()函数使得socket处于一个别动监听的模式,并且为这个socket建立一个输入数据队列,将到达服务器的请求保存到此队列中,直到程序处理。
int listen(int sockfd, int backlog);
- sockfd 调用socket()函数返回的socket套接字
- backlog 指定在请求队列中允许的最大请求数
- 缓存队列中的请求,等待accept处理
服务器端接收
建立好缓存队列后,服务器端程序可以调用accept()函数处理客户的连接请求。
int accept(int sockfd, void *addr, int *addrlen);
- sockfd 被监听的socket套接字
- addr 通常是一个指向sockaddr_in变量的指针,该变量用于存储提出连接请求的主机信息
- addrlen 通常是一个指向值为
sizeof(struct sockaddr_in)的整型指针变量
数据发送和接收
面向连接的数据发送
int send(int sockfd, const void *msg, int len, int flags);
- sockfd 监听的套接字
- msg 指向要发送的数据
- len 以字节为单位的数据长度
- flags 一般设置为0
- 返回值为实际发送出去的字节数
面向连接的数据接收
int recv(int sockfd, void *buf, int len, int flags);
- sockfd 监听的套接字
- buf 存放接收数据的缓冲区
- len 以字节为单位的数据长度
- flags 一般设置为0
- 返回值为实际接收到的数据
无连接的数据发送
int sendto(int sockfd, const void msg, int len, int flags, const struct sockaddr to, int tolen);
这个函数比send()函数多了两个参数
- to 要发送数据到的目的主机的IP地址和端口号信息
- tolen 通常别赋值为
sizeof(struct sockaddr) - 返回值为实际发送出去的字节数
无连接的数据接收
int recvfrom(int sockfd, void *buf, int len, int flag, struct sockaddr from, int fromlen);
这个函数比recv()函数多了几个参数
- from 是一个struct sockaddr类型的变量,保存数据来源主机的IP地址和端口号
- fromlen 一般设置为
sizeof(stuct sockaddr) - 返回值为实际接收到的数据
关闭socket
停止socket上面的全部操作
closesocket(sockfd);关闭socket上面的某一个操作
int shutdown(int sockfd, int how);
how有几个可选的值- 0:不允许继续接收数据
- 1:不允许接续发送数据
- 2:不允许继续发送和接收数据
c++ 网络编程基础的更多相关文章
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- iOS开发网络篇—网络编程基础
iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过 ...
- Android 网络编程基础之简单聊天程序
前一篇讲了Android的网络编程基础,今天写了一个简单的聊天程序分享一下 首先是服务端代码: package com.jiao.socketdemo; import java.io.Buffered ...
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
- Java网络编程基础(Netty预备知识)
今天在家休息,闲来无事,写篇博客,陶冶下情操~~~ =================我是分割线================ 最近在重新学习Java网络编程基础,以便后续进行Netty的学习. 整 ...
- 用Netty开发中间件:网络编程基础
用Netty开发中间件:网络编程基础 <Netty权威指南>在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对<Netty权威指南(第二版)&g ...
- Linux 高性能服务器编程——Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字(so ...
- Python网络编程基础pdf
Python网络编程基础(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1VGwGtMSZbE0bSZe-MBl6qA 提取码:mert 复制这段内容后打开百度网盘手 ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
随机推荐
- GCC使用总结
概念 GCC一开始是linux系统集成的用来编译C程序的编译器(GNU C Compiler),目前GCC已经不仅仅支持C语言了,因而其缩写名单意义也变成(GNU Compiler Collectio ...
- jqGrid行编辑配置,方法,事件
行编辑可以在行修改后更新数据,如下图所示 用户用鼠标点击选择一行,jqGrid将可编辑的字段转换为数据输入单元,如上面图所示.不可编辑的列,如id,不会转为可输入单元,而是保持不变.可以通过配置col ...
- 小顶堆---非递归C语言来一发
#include <stdio.h> #include <stdlib.h> #define HEAP_SIZE 100 #define HEAP_FULL_VALUE -10 ...
- CentOS7怎样安装Nginx1.12.2
通过nginx官网的源码安装 yum -y install gcc* openssl* pcre* zlib* 安装相关依赖 这一步很重要 不然会报乱七八糟的错误 cd /usr/local进入/us ...
- JS之try..catch...
try 测试代码块的错误. catch 语句处理错误. throw 创建并跑出错误. try { //在这里运行代码 抛出错误 }catch(err){ //在这里处理错误 } 实例: <p&g ...
- rxjs 入门--环境配置
原文: https://codingthesmartway.com/getting-started-with-rxjs-part-1-setting-up-the-development-enviro ...
- test20190818 NOIP2019 模拟赛
0+0+20=20,不给大样例,小数据又水,还没有题解的垃圾题. A 题 问题描述: long long ago, Lxhgww 统治的国家里有 n 个城市,其中某一个城市是 capital (首都) ...
- eclipse 安装反编译工具
jd-gui是我最喜欢使用的java反编译工具.它是一款用c++开发的轻量级的java反编译工具,无须安装即可以使用,你甚至都不需要安装jre环境就可以实现反编译:支持最新的jdk,目前是jdk 1. ...
- Sublime 原版安装
sublime text3 安装方法 ① 官网下载安装 https://www.sublimetext.com/3 ② 更改hosts文件 具体方法如下: windows系统的hosts文件在C:\W ...
- jsp+ tinymce粘贴word
最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...