当前位置: 首页 > news >正文

网站QQ互联教程seo专员岗位要求

网站QQ互联教程,seo专员岗位要求,英文网站建设 济南,深圳外贸网站建设工作室编译环境:VS Code gcc,环境搭建可以参考这里。本系列文章参考 尹圣雨 著的《TCP/IP网络编程》。 所有学习都要在开始前认识到其必要性!这是我经常挂在嘴边的一句话。从语言的基本语法到系统函数,若无法回答“这到底有何必要&…
  • 编译环境:VS Code + gcc,环境搭建可以参考这里。
  • 本系列文章参考 尹圣雨 著的《TCP/IP网络编程》。

所有学习都要在开始前认识到其必要性!这是我经常挂在嘴边的一句话。从语言的基本语法到系统函数,若无法回答“这到底有何必要?”学习过程将变得枯燥无味,而且很容易遗忘。
— 尹圣雨

SOCKET 编程头文件和库

使用 Windows Socket 编程,需要 winsock2.h 头文件和 ws2_32.lib 库。
对于 gcc 编译器,加载 ws2_32.lib 库需要在编译参数中添加参数:-lwsock32 。否则 gcc 会因为没有找到库而报错(编译的时候出现
undefined reference to `__imp_WSAStartup’)。
具体添加方法为:

  1. 在工程文件夹下打开 .vscode 文件夹
  2. 打开 tasks.json 文件,在 args 字段中添加新的参数 -lwsock32 ,如下图所示。
    请添加图片描述

Windows SOCKET 初始化

以下是 Windows SOCKET 编程固定格式。

#include <winsock2.h>int main(int argc, char *argv[])
{WSADATA wsaData;// ...if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){// ...exit(1);}// ...WSACleanup();return 0;
}

首先必须调用 WSAStartup 函数,设置程序中用到的 Windows SOCKET 版本,并初始化相应版本的库。
WSAStartup 函数原型为:

/*成功返回 0 ,失败返回非零错误码*/
int  WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

Windows SOCKET 存在多个版本,参数 wVersionRequested 指明使用哪个版本。版本占用 2 字节,高 8 位为副版本,低 8 位为主版本,比如 V1.2 版本,则传递 0x0201。一般会使用 MAKEWORD 宏来构建版本信息:

WORD ver = MAKEWORD(1, 2);			// V1.2 版本, ver = 0x0201

第二个参数 lpWSAData 用于保存库信息。

其次,当程序结束之前,需要调用 WSACleanup 注销 SOCKET 库。

Windows SOCKET 相关函数

  1. socket 函数
/*成功返回 SOCKET 句柄,失败返回 INVALID_SOCKET*/
SOCKET socket(int af,int type,int protocol);
  • af :指定 SOCKET 使用的 协议族 ,一个 协议族 下面会有多种 协议 ,比如 iPv4 协议族就有 TCP 协议、UDP 协议等等,一个 协议族 下面也有多种数据传输方式。
    常见协议族有:IPv4协议族(PF_INET)、IPv6协议族(PF_INET6)、底层 SOCKET 的协议族(PF_PACKET)。
  • type:指定 SOCKET 的 数据传输方式
    常见的数据传输方式有:面向连接的(SOCK_STREAM)、面向消息的(SOCK_DGRAM

面向连接的 SOCKET :可靠的、按序传递的、基于字节的面向连接的数据传输方式
面向消息的 SOCKET:不可靠的、不按序传递的、以数据的高速传输为目的

  • protocol:指定 SOCKET 使用的 协议,该协议必须是协议族支持的协议之一。
    常见的协议类型有:TCP 协议(IPPROTO_TCP)、UDP 协议(IP_PROTO_UDP
  1. bind 函数
/*成功返回 0 ,失败返回 SOCKET_ERROR*/
int bind(SOCKET s,const struct sockaddr *name,int namelen);
  1. listen 函数
/*成功返回 0 ,失败返回 SOCKET_ERROR
* backlog:连接请求队列的长度,表示允许最多多少个连接请求进入队列
*/
int listen(SOCKET s,int backlog);
  1. accept 函数
    调用 accept 函数时,若等待队列为空,则 accept 函数不会返回,直到队列中出现新的客户端连接。
/*成功返回 SOCKET 句柄,失败返回 INVALID_SOCKET
* addr:保存客户端地址信息
*/
SOCKET accept(SOCKET s,struct sockaddr *addr,int *addrlen);
  1. connect 函数
    客户端调用 connect 函数后,发生以下情况之一才会返回:
    a. 服务器端接收连接请求
    b. 发生断网等异常情况而中断连接请求
/*成功返回 0 ,失败返回 SOCKET_ERROR */
int connect(SOCKET s,const struct sockaddr *name,int namelen);
  1. closesocket 函数
/*成功返回 0 ,失败返回 SOCKET_ERROR*/
int closesocket(SOCKET s);

Windows 的 I/O 函数

Windows 严格区分文件 I/O 函数和 SOCKET I/O函数,而Linux只有文件 I/O 函数。

  1. send 函数
/*成功返回传输的字节数,失败返回 SOCKET_ERROR*/
int send(SOCKET s,const char *buf,int len,int flags);
  1. recv 函数
/*成功返回接收的字节数(收到 EOF 时为 0 ),失败返回 SOCKET_ERROR*/
int WSAAPI recv(SOCKET s,char *buf,int len,int flags);

基于 Windoes 的服务器和客户端测试代码

  1. 服务器端
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>void ErrorHandler(char *message);int main(int argc, char *argv[])
{WSADATA wsaData;SOCKET hServSock, hClntSock;SOCKADDR_IN servAddr, clntAddr;int szClntAddr;char message[] = "Hello, world!";if(argc != 2){printf ("Usage: %s <port>\n", argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){ErrorHandler("WSAStartup failed");}hServSock = socket(PF_INET, SOCK_STREAM, 0);if(hServSock == INVALID_SOCKET)ErrorHandler("socket error");memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = htonl(INADDR_ANY);servAddr.sin_port = htons(atoi(argv[1]));if(bind(hServSock, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR){ErrorHandler("bind socket error");}if(listen(hServSock, 5) == SOCKET_ERROR)ErrorHandler("listen socket error");szClntAddr = sizeof(clntAddr);hClntSock = accept(hServSock, (SOCKADDR *)&clntAddr, &szClntAddr);if(hClntSock == INVALID_SOCKET)ErrorHandler("accept error");send(hClntSock, message, sizeof(message), 0);closesocket(hClntSock);closesocket(hServSock);WSACleanup();return 0;
}void ErrorHandler(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B 。
运行:在终端键入 .\hello_server_win.exe 1234

  1. 客户端
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>void ErrorHandler(char *message);int main(int argc, char *argv[])
{WSADATA wsaData;SOCKET hClntSock;SOCKADDR_IN servAddr;char message[30];int strLen;if(argc != 3){printf ("Usage: %s <IP> <port>\n", argv[0]);exit(1);}if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)ErrorHandler("WSAStartup failed");hClntSock = socket(PF_INET, SOCK_STREAM, 0);if(hClntSock == INVALID_SOCKET)ErrorHandler("socket error");memset(&servAddr, 0, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = inet_addr(argv[1]);servAddr.sin_port = htons(atoi(argv[2]));if(connect(hClntSock, (SOCKADDR *)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)ErrorHandler("connect socket error");strLen = recv(hClntSock, message, sizeof(message)-1, 0);if(strLen == EOF)ErrorHandler("read() error!");printf("Message from server: %s \n", message);closesocket(hClntSock);WSACleanup();return 0;
}void ErrorHandler(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}

编译:菜单 Terminal > Run Build Task ,或者快捷键 Ctrl+Shift+B 。
运行:在终端键入 .\hello_client_win.exe 127.0.0.1 1234


文章转载自:
http://dinncomisdiagnosis.bkqw.cn
http://dinnconabber.bkqw.cn
http://dinncocystectomy.bkqw.cn
http://dinncodealer.bkqw.cn
http://dinncobenumbed.bkqw.cn
http://dinncostrontium.bkqw.cn
http://dinncodpm.bkqw.cn
http://dinncopetroleum.bkqw.cn
http://dinncoflintily.bkqw.cn
http://dinncoovercredulous.bkqw.cn
http://dinncomicromole.bkqw.cn
http://dinncoscopophilia.bkqw.cn
http://dinncohoofbound.bkqw.cn
http://dinncobitumastic.bkqw.cn
http://dinncospatterdash.bkqw.cn
http://dinncoflashover.bkqw.cn
http://dinncomio.bkqw.cn
http://dinncotoe.bkqw.cn
http://dinncospoonbeak.bkqw.cn
http://dinnconightglow.bkqw.cn
http://dinncocubist.bkqw.cn
http://dinncoerose.bkqw.cn
http://dinncocession.bkqw.cn
http://dinncophotoelectroluminescence.bkqw.cn
http://dinncodate.bkqw.cn
http://dinncoperineuritis.bkqw.cn
http://dinncoplacebo.bkqw.cn
http://dinncoirgun.bkqw.cn
http://dinncodroppable.bkqw.cn
http://dinncopectic.bkqw.cn
http://dinncowedding.bkqw.cn
http://dinncoclaybank.bkqw.cn
http://dinncoundetachable.bkqw.cn
http://dinncoquilting.bkqw.cn
http://dinnconudp.bkqw.cn
http://dinncochroma.bkqw.cn
http://dinncocatenaccio.bkqw.cn
http://dinncopulsometer.bkqw.cn
http://dinncotoyman.bkqw.cn
http://dinncoparavion.bkqw.cn
http://dinncocacotrophia.bkqw.cn
http://dinncoalors.bkqw.cn
http://dinncopiecemeal.bkqw.cn
http://dinncocardiodynia.bkqw.cn
http://dinncofable.bkqw.cn
http://dinnconeuroregulator.bkqw.cn
http://dinncoradiate.bkqw.cn
http://dinncogoldberg.bkqw.cn
http://dinncoavventurina.bkqw.cn
http://dinncocookoff.bkqw.cn
http://dinncowholesome.bkqw.cn
http://dinncochirurgery.bkqw.cn
http://dinncocambistry.bkqw.cn
http://dinncoblackfellow.bkqw.cn
http://dinncoviticetum.bkqw.cn
http://dinncointeroperable.bkqw.cn
http://dinncochitlings.bkqw.cn
http://dinncoexceedingly.bkqw.cn
http://dinncounsyllabic.bkqw.cn
http://dinncobladework.bkqw.cn
http://dinncotrephine.bkqw.cn
http://dinncococobolo.bkqw.cn
http://dinncocrone.bkqw.cn
http://dinncodifferently.bkqw.cn
http://dinncotreacherous.bkqw.cn
http://dinncodisgustingly.bkqw.cn
http://dinncoizar.bkqw.cn
http://dinncoreflective.bkqw.cn
http://dinncoconducively.bkqw.cn
http://dinncohuff.bkqw.cn
http://dinncozeal.bkqw.cn
http://dinncoturnstone.bkqw.cn
http://dinncobaptismally.bkqw.cn
http://dinncotetherball.bkqw.cn
http://dinncosuprahuman.bkqw.cn
http://dinncoenrollee.bkqw.cn
http://dinncoidiomorphism.bkqw.cn
http://dinncocornhusker.bkqw.cn
http://dinncoacquainted.bkqw.cn
http://dinncocysteamine.bkqw.cn
http://dinncoinfernal.bkqw.cn
http://dinncokeratolytic.bkqw.cn
http://dinncothrid.bkqw.cn
http://dinncocasement.bkqw.cn
http://dinncocouloir.bkqw.cn
http://dinncointerdigital.bkqw.cn
http://dinncocoziness.bkqw.cn
http://dinncostereopticon.bkqw.cn
http://dinncotripack.bkqw.cn
http://dinncoyersiniosis.bkqw.cn
http://dinncodependant.bkqw.cn
http://dinncobrabanconne.bkqw.cn
http://dinncoconsecrated.bkqw.cn
http://dinncounpresuming.bkqw.cn
http://dinncofrederic.bkqw.cn
http://dinncounforeknown.bkqw.cn
http://dinncoharmine.bkqw.cn
http://dinncomacrology.bkqw.cn
http://dinncodolichocephal.bkqw.cn
http://dinncoelectrogram.bkqw.cn
http://www.dinnco.com/news/91933.html

相关文章:

  • 做销售找客户的网站班级优化大师下载安装最新版
  • 泊头做网站价格可以入侵的网站
  • 制作网站公司服务器租赁一年的费用信息流优化师怎么入行
  • 新公司怎么做网站java培训班学费一般多少
  • 网站域名证书网络推广软文
  • 投标网站建设服务承诺苏州网站seo服务
  • 搭建直播网站需要怎么做微软bing搜索引擎
  • 手机网站建设多钱如何进行百度推广
  • 爱站关键词挖掘广点通和腾讯朋友圈广告区别
  • 企业全屏网站沪指重上3000点
  • 人力资源招聘公司网站seo快速排名
  • 素材免费网站中山seo推广优化
  • 深圳外网站建设福州短视频seo网红
  • 丰都网站建设网站优化建议怎么写
  • 上海智能模板建站2345网址导航删除办法
  • 怎么可以预览自己做的网站b2b平台有哪几个
  • 注册公司需要注册资金吗谷歌seo网站推广怎么做优化
  • 网站建设价格标准报价手机百度高级搜索
  • 做网站卖酒软文推广发稿平台
  • 网站里面如何做下载的app简单的网站建设
  • 安装安全狗网站打不开超级外链吧外链代发
  • 做仪表宣传哪个网站好百度大全下载
  • 深圳市文刀网站建设google搜索引擎官网
  • 多语种网站制作seo快速优化报价
  • 深圳 网站制作 哪家泰安seo培训
  • 做网站产品资料表格网络营销推广方案范文
  • 微信公众号1000阅读量多少钱免费的seo网站
  • 宣威网站建设百度怎么投放广告
  • 网站内容设计上的特色企业网站seo优化
  • 门户网站那个程序比较2022年最火的电商平台