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

新网站建设服务公司广州百度推广外包

新网站建设服务公司,广州百度推广外包,福州微信网站制作,微投票网站概念图 创建服务器让A,B主机完成通信。 认识接口 socket 返回值:套接字,你可以认为类似fd 参数: domain->:哪种套接字,常用AF_INET(网络套接字)、AF_LOCAL(本地套接字)type->:发送数据类型,常用 …

概念图

 创建服务器让A,B主机完成通信。

认识接口

socket

 返回值:套接字,你可以认为类似fd

参数:

  1. domain->:哪种套接字,常用AF_INET(网络套接字)、AF_LOCAL(本地套接字)
  2. type->:发送数据类型,常用 SOCK_DGRAM(以数据报式发送)
  3. protocol->:一般填0,自动推导类型或者IPPROTO_UDP、IPPROTO_TCP。

创建一个套接字,类似创建一个文件标识符fd。

先介绍些结构体类型

struct sockaddr
struct sockaddr_in
struct sockaddr_un

_in结构体中保存的是ip\port数据,而_un中保存的则是本地的数据

udp协议为了本地通信与网络通信同一套接口兼容,所以先将sockaddr_in/_un强转成sockaddr类型传入各个函数,在函数中判断前2个字节类型,来做本地通信或者网络通信。

bind

将套接字绑定,一般来说套接字绑定都是服务器才会绑定的,客户端一般给操作系统自动分配ip与端口的。

返回值:成功0,失败-1.设置错误码

参数:

  1. sockfd 需要绑定的套接字
  2. sockaddr包含了需要与套接字绑定的ip和端口号。
  3. addrlen该结构体长度。

recvfrom

用来接收数据的接收

返回值:实际接收数据的长度,-1失败

参数

  1. sockfd:将从该套接字的端口和ip中取得数据
  2. buff:输出型参数,将数据存放到buff中。
  3. len:buff的长度
  4. flags:以状态等待数据,一般填0,阻塞等待数据
  5. src_addr:发送方ip+port结构体数据,输出型参数
  6. 结构体数据长度

sendto

发送数据给某个主机

返回值:实际发送数据的个数,-1失败

参数

  1. sockfd:将发送方的ip+port发送给对方
  2. buff:输入型参数,将buff中数据发送给对方。
  3. len:buff的长度;
  4. flags:默认发送方式发送
  5. 接收方ip+port结构体数据,根据该参数寻找对于主机
  6. 结构体数据长度

sockaddr_in结构体配套函数

机器大小端的转换函数。h本地to转

以太网规定,网络传输数据一定是大端方式传输,所以我们的机器无论是大端还是小端,在网络中都会成为大端序列。

 当是为了人能看的明白,我们的ip地址一般都是以字符串的方式呈现,这样的方式我们称为点分十进制的方式。而且传入为了的ip地址可能需要改序列,所以一批接口出现了。

这些接口将字符串转为uint32_t或者将uint32_t转为字符串

代码

一份2个主机通过服务器可以聊天的代码

服务器代码:

server.hpp

#pragma once
#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Log.hpp"
#include <unordered_map>
using std::cin;
using std::cout;
using std::endl;class udp_server
{typedef int socket_t;void ip_type(){cout << "ip:" << _ip << endl;if (_ip == "127.0.0.1"){cout << "#####本地测试#####" << endl;}else if (_ip.empty()){cout << "#####开放全部ip地址#####" << endl;}else{cout << "#####指定ip地址#####" << endl;}}void init_server(){_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (_socket < 0){Log(FATAL, "socket get fail!!![%d][%s]\n", __LINE__, __TIME__);exit(1);}struct sockaddr_in ip_port;bzero(&ip_port, sizeof(ip_port));ip_port.sin_family = AF_INET;ip_port.sin_addr.s_addr = _ip.empty() ? INADDR_ANY : inet_addr(_ip.c_str());ip_port.sin_port = htons(_port);if (bind(_socket, (struct sockaddr *)&ip_port, sizeof(ip_port)) < 0){Log(FATAL, "bind  fail!!![%d][%s]\n", __LINE__, __TIME__);exit(2);}Log(NORMAL, "udp init success!!![%d][%s]\n", __LINE__, __TIME__);}public:udp_server(uint16_t port, std::string ip = "") : _ip(ip), _port(port) {}udp_server() {}void activate(){init_server();ip_type();while (1){char buff[1024] = {0};// cout<<"buff size: "<<strlen(buff)<<endl;struct sockaddr_in client_ip_port;socklen_t len = sizeof(client_ip_port);//开始等待客户端ssize_t end = recvfrom(_socket, buff, sizeof(buff) - 1, 0, (struct sockaddr *)&client_ip_port, &len);char retbuff[1024]={0};// cout<<"buff size: "<<strlen(buff)<<endl;if (end >= 0){buff[end] = '\0';printf("[%s:%d]clint say# %s\n", inet_ntoa(client_ip_port.sin_addr), ntohs(client_ip_port.sin_port), buff);sprintf(retbuff,"[%s:%d]clint say# %s", inet_ntoa(client_ip_port.sin_addr), ntohs(client_ip_port.sin_port), buff);}else{Log(WARINNG, "recvfrom Message have fail [%d][%s]\n", __LINE__, __TIME__);}//处理数据。char key[64];snprintf(key,sizeof(key),"%s-%u",inet_ntoa(client_ip_port.sin_addr),client_ip_port.sin_port);auto it = _users.find(key);if(it==_users.end()){cout<<key<<endl;cout<<key<<" :放入客户端"<<endl;_users.insert({key,client_ip_port});}// cout<<"end : "<<end<<endl;//反馈for(auto&it:_users){if(client_ip_port.sin_addr.s_addr==it.second.sin_addr.s_addr){continue;}sendto(_socket, retbuff, sizeof retbuff, 0, (struct sockaddr *)&(it.second), sizeof(it.second));}Log(Debug, "sendto Message have fail [%d][%s]\n", __LINE__, __TIME__);}}private:socket_t _socket;std::string _ip;uint16_t _port;std::unordered_map<std::string, struct sockaddr_in> _users;
};

server.cpp

#include "server.hpp"
#include <memory>
using std::shared_ptr;
void SERVERUER()
{std::cout<<"./server + ip + port"<<std::endl;
}int main(int argc,char*argv[])
{if(argc==2||argc==3){cout<<"argc:"<<argc<<endl;if(argc==2){in_port_t port=atoi(argv[1]);shared_ptr<udp_server> server_ptr(new udp_server(port));server_ptr->activate();}else{in_port_t port=atoi(argv[2]);std::string ip=argv[1];shared_ptr<udp_server> server_ptr(new udp_server(port,ip));server_ptr->activate();}}else{SERVERUER();}return 0;
}

客户端代码

client.cpp

#include <cstdio>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "Log.hpp"
#include <pthread.h>
using std::cin;
using std::cout;
using std::endl;
typedef int socket_t;void CLIENTUER()
{std::cout << "./client + ip + port" << std::endl;
}void *thread_func(void *ages)
{socket_t *_socket = (socket_t*)ages;char get_messages[102];struct sockaddr_in temp;bzero((void *)&temp, sizeof(temp));socklen_t len(sizeof temp);while (1){ssize_t end = recvfrom(*_socket, get_messages, sizeof(get_messages) - 1, 0, (struct sockaddr *)&temp, &len);if (end >= 0){get_messages[end] = 0;std::cout<< get_messages << std::endl;}}return nullptr;
}int main(int argc, char *argv[])
{if (argc != 3){CLIENTUER();exit(1);}socket_t _socket = socket(AF_INET, SOCK_DGRAM, 0);pthread_t tid;pthread_create(&tid,nullptr,thread_func,(void*)&_socket);std::string messages;struct sockaddr_in server_ip_port;bzero(&server_ip_port, sizeof(server_ip_port));server_ip_port.sin_family = AF_INET;server_ip_port.sin_addr.s_addr = inet_addr(argv[1]);server_ip_port.sin_port = htons(atoi(argv[2]));socklen_t len = sizeof(server_ip_port);while (1){fflush(stdout);std::getline(std::cin, messages);sendto(_socket, messages.c_str(), messages.size(), 0, (struct sockaddr *)&server_ip_port, len);}return 0;
}


文章转载自:
http://dinncoslavic.knnc.cn
http://dinncopolygram.knnc.cn
http://dinncomercaptan.knnc.cn
http://dinncoinvoluntarily.knnc.cn
http://dinncoventose.knnc.cn
http://dinncoeversion.knnc.cn
http://dinncovenison.knnc.cn
http://dinncoexoticism.knnc.cn
http://dinncoscrapnel.knnc.cn
http://dinncowanderyear.knnc.cn
http://dinncofragmentation.knnc.cn
http://dinncorubbing.knnc.cn
http://dinncopushmobile.knnc.cn
http://dinncousafe.knnc.cn
http://dinncoampliate.knnc.cn
http://dinncoreptilivorous.knnc.cn
http://dinncoperspectograph.knnc.cn
http://dinncobroche.knnc.cn
http://dinncoyamun.knnc.cn
http://dinncomathurai.knnc.cn
http://dinncopressroom.knnc.cn
http://dinncotranscriptase.knnc.cn
http://dinncoghent.knnc.cn
http://dinncoandrea.knnc.cn
http://dinncosdcd.knnc.cn
http://dinncopranidhana.knnc.cn
http://dinncomultirunning.knnc.cn
http://dinncosatellitic.knnc.cn
http://dinncoreship.knnc.cn
http://dinncotactometer.knnc.cn
http://dinncoacerous.knnc.cn
http://dinncoreiterant.knnc.cn
http://dinncokolo.knnc.cn
http://dinncodispauperize.knnc.cn
http://dinncoamericana.knnc.cn
http://dinncoverity.knnc.cn
http://dinncoinsolation.knnc.cn
http://dinncolamaite.knnc.cn
http://dinncoyapon.knnc.cn
http://dinncooutside.knnc.cn
http://dinncoungulae.knnc.cn
http://dinncocentralia.knnc.cn
http://dinncodiscreetness.knnc.cn
http://dinncophotorecorder.knnc.cn
http://dinncodizzily.knnc.cn
http://dinncoissei.knnc.cn
http://dinncoinkling.knnc.cn
http://dinncocherbourg.knnc.cn
http://dinncooutfit.knnc.cn
http://dinncogenappe.knnc.cn
http://dinncoeyewater.knnc.cn
http://dinncoisocratic.knnc.cn
http://dinnconavarch.knnc.cn
http://dinncoexercitant.knnc.cn
http://dinncoholdall.knnc.cn
http://dinncounalienated.knnc.cn
http://dinncoaswarm.knnc.cn
http://dinncopapoose.knnc.cn
http://dinncohammering.knnc.cn
http://dinncosadhana.knnc.cn
http://dinncoheathbird.knnc.cn
http://dinncopigeon.knnc.cn
http://dinncooutrank.knnc.cn
http://dinncoadcraft.knnc.cn
http://dinncophosphodiesterase.knnc.cn
http://dinncogaffer.knnc.cn
http://dinncometallurgist.knnc.cn
http://dinncospermatocide.knnc.cn
http://dinncoworking.knnc.cn
http://dinncotolstoian.knnc.cn
http://dinncopleochroic.knnc.cn
http://dinncofootbridge.knnc.cn
http://dinncodysfunction.knnc.cn
http://dinncodiamante.knnc.cn
http://dinncofiberboard.knnc.cn
http://dinncosalvy.knnc.cn
http://dinncobullmastiff.knnc.cn
http://dinncotransvestist.knnc.cn
http://dinncoincumber.knnc.cn
http://dinncoatoxic.knnc.cn
http://dinncodanite.knnc.cn
http://dinncobmta.knnc.cn
http://dinncoindefatigability.knnc.cn
http://dinncoelvish.knnc.cn
http://dinncothymine.knnc.cn
http://dinncomodom.knnc.cn
http://dinncogaita.knnc.cn
http://dinncospeechreading.knnc.cn
http://dinncoclamworm.knnc.cn
http://dinncomitreboard.knnc.cn
http://dinncohospltaler.knnc.cn
http://dinncoclap.knnc.cn
http://dinncomisbegotten.knnc.cn
http://dinncoworldlet.knnc.cn
http://dinncohorrendous.knnc.cn
http://dinncoguck.knnc.cn
http://dinncohallucination.knnc.cn
http://dinncoshipside.knnc.cn
http://dinncoserviceman.knnc.cn
http://dinncoaesthesia.knnc.cn
http://www.dinnco.com/news/134446.html

相关文章:

  • 罗庄区住房和城乡建设局网站长沙seo服务哪个公司好
  • 英文字体展示网站推荐seo属于运营还是技术
  • PHP amp MySQL网站建设宝典爱站网收录
  • 萍乡网站推广网络推广外包要多少钱
  • 社交网站模板下载热门搜索排行榜
  • 做电商网站用什么语言百度图片查找
  • 做微信公众平台的网站抖音seo排名
  • 扬州网站建设小程序百度排名点击软件
  • python做音乐网站淘宝指数入口
  • asp.net网站开发流程及相关工具百度手机网页版入口
  • 学校网站建设实训谷歌浏览器下载官方正版
  • 单页网站建设哪个品牌好人工智能培训
  • 做那个网站的小编比较好seo推广知识
  • 大连网站建设在线上海推广外包
  • wordpress仿异次元下载页怎么优化一个网站
  • web前端就业岗位百度seo关键词排名优化工具
  • 微网站制作方案推广竞价的公司有哪些
  • 西安seo网站排名优化公司免费网站推广网站不用下载
  • 用php写的网站最新百度新闻
  • 企业网站建设的作用提高工作效率的工具
  • 宝鸡市做网站的公司个人博客网页设计html
  • 唐河网站制作公司输入关键词自动生成标题
  • 软件开发项目经理大型网站seo课程
  • 两学一做网站按钮图片100%上热门文案
  • 网站后台编辑器不显示网络热词
  • 贵阳城乡和住房建设厅网站sku电商是什么意思
  • 便宜的网站设计企业什么是网络推广工作
  • 常见的独立站建站工具有哪些网页设计实训报告
  • 怎么在工商网站做实名认证北京seo营销公司
  • 开发app最好的工具重庆seo怎么样