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

做网站找哪家好思南网络销售是什么工作内容

做网站找哪家好思南,网络销售是什么工作内容,在线设计工具的网站怎么做,青岛博海建设集团有限公司网站socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 数据报套接字(SOCK_DGRAM) UD…

socket类型

流式套接字(SOCK_STREAM) TCP

提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。

数据报套接字(SOCK_DGRAM) UDP

提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

原始套接字(SOCK_RAW)

可以对较低层次协议如IP、ICMP直接访问。

服务器:
1.创建流式套接字(socket())------------------------> 有手机
2.指定本地的网络信息(struct sockaddr_in)----------> 有号码
3.绑定套接字(bind())------------------------------>绑定电话
4.监听套接字(listen())---------------------------->待机
5.链接客户端的请求(accept())---------------------->接电话
6.接收/发送数据(recv()/send())-------------------->通话
7.关闭套接字(close())----------------------------->挂机

客户端:
1.创建流式套接字(socket())----------------------->有手机
2.指定服务器的网络信息(struct sockaddr_in)------->有对方号码
3.请求链接服务器(connect())---------------------->打电话
4.发送/接收数据(send()/recv())------------------->通话
5.关闭套接字(close())--------------------------- >挂机

函数接口

socket

int socket(int domain, int type, int protocol);
//作用:创建一个socket通信描述符
domain:指定通信的域(通信协议)AF_UNIX, AF_LOCAL   本地通信AF_INET  ipv4AF_INET6  ipv6
type:指定socket的类型SOCK_STREAM:流式套接字,接下来我们的通信使用TCP协议SOCK_DGRAM:数据报套接字,接下来我们的通信使用UDP协议
protocol:填0    返回值:如果成功,返回创建的描述符,如果失败,返回-1

connect

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
作用:请求连接服务器
参数:
sockfd:上面socket接口得到的描述符
addr:相当于服务器的地址(IP+port)
addrlen:地址的长度,因为前面的地址是可变的,所以要通过参数来协定地址的长度
返回值:
0 -1

sockaddr结构体

//从bind接口的帮助文档中拿到
struct sockaddr {sa_family_t sa_family;char        sa_data[14];}
上述地址结构是一个通用结构,我们在用实际协议进行通信的时候,需要转换成相应协议的结构体。
用man 7 ip来查看ipv4对应的结构体struct sockaddr_in {sa_family_t    sin_family; /* 地址协议族,=socket接口第一个参数 */in_port_t      sin_port;   /* 指定端口,端口要用网络字节序(大端) */struct in_addr sin_addr;   /* IP地址 */
};/* Internet address. */
struct in_addr {uint32_t       s_addr;     /* address in network byte order */
};

bind

int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
作用:绑定服务器地址:IP和端口,相当于对外公开自己的IP和端口,客户端就可以连接了
addr:绑定的IP和端口结构体,注意绑定的是自己的IP和端口IP:取真实的某个网卡的地址,也可以直接写0.0.0.0
addrlen:地址的大小  

listen

int listen(int sockfd, int backlog);
作用:进入监听状态,以便接收客户端的连接
sockfd:上面的服务器描述符
backlog:同时能处理的客户端的连接数量,写个5 10都可以
返回值:0 -1

accept

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
接收客户端连接,注意,这是一个阻塞接口,如果没有新的连接过来,那么会等待
sockfd:上面的服务器描述符
addr:客户端的地址(来电显示)
addrlen:客户端地址的长度,是入参,传入然后可能会被接口修改返回值:如果成功,会返回一个非负的整数,代表接收的新的连接的描述符

recv/send

//recv和send是网络的专用接口,比起read和write只是多了一个flags参数,flag一般情况下会取0,代表阻塞接受和发送
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
返回值:>0:接收的字节数<0:失败=0:代表对端退出了
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

close

int close(int fd);
关闭套接字连接

TCP

在这里插入图片描述

示例代码

TCP客户端

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>int main(int argc, char const *argv[])
{//创建套接字int fd = socket(AF_INET, SOCK_STREAM, 0);if(fd < 0){perror("socket err");return -1;}//连接到服务器struct sockaddr_in server_addr;int len = sizeof(server_addr);//指定连接的服务器的地址(IP+port)memset(&server_addr, 0, len);server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888);server_addr.sin_addr.s_addr = inet_addr("192.168.0.109");int ret = connect(fd, (struct sockaddr *)&server_addr, len);if(ret < 0){perror("connect err");return -1;}printf("conect success\n");char buf[64] = {0};while (1){memset(buf, 0, 64);//从终端接收用户输入,发给服务器,等待服务器的数据,打印gets(buf);if(strcmp(buf, "quit") == 0){break;}send(fd, buf, 64, 0);memset(buf, 0, 64);ret = recv(fd, buf, 64, 0);if(ret > 0){printf("recv data = %s\n", buf);}else if(ret == 0){printf("peer exit\n");break;}else{perror("recv err\n");return -1;}}close(fd);return 0;
}

TCP服务器

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>int main(int argc, char const *argv[])
{//创建服务器的套接字int server_fd = socket(AF_INET, SOCK_STREAM, 0);if(server_fd < 0){perror("socket err");return -1;}//初始化服务器地址struct sockaddr_in server_addr, client_addr;int len = sizeof(server_addr);memset(&server_addr, 0, len);server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888);
#if 0    server_addr.sin_addr.s_addr = inet_addr("192.168.0.194");
#elseserver_addr.sin_addr.s_addr = INADDR_ANY;
#endif//绑定套接字的地址int ret = bind(server_fd, (struct sockaddr *)&server_addr, len);if(ret < 0){perror("bind err");return -1;}//启动监听ret = listen(server_fd, 5);if(ret < 0){perror("listen err");return -1;}//接收连接int clientfd = accept(server_fd, (struct sockaddr *)&client_addr, &len);if(clientfd < 0){perror("accept err");return -1;        }//打印客户端的地址,注意端口要转成主机字节序printf("recv a new connect, ip = %s, port=%d\n",\inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));char buf[64] = {0};while (1){memset(buf, 0, 64);//一旦新的连接过来后,后续通信统统使用新的描述符len = read(clientfd, buf, 64);if(len > 0){printf("recv data = %s\n", buf);}else if(len == 0){printf("client exit\n");break;}else{perror("recv err\n");return -1;}}close(clientfd);close(server_fd);return 0;
}

UDP

TCP和UDP的异同点

相同点:

同属于传输层协议

不同点:

TCP:流式套接字,面向连接的,可靠的通信
UDP:数据报套接字,无连接的,不可靠的通信

通信流程

在这里插入图片描述

接口

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);
作用:接收UDP对端发来的消息
sockfd:描述符
buf:接收缓冲区
len:缓冲区的长度
flags:0,阻塞接收
src_addr:收到消息后,对端的地址存到这里(IP+PORT)
addrlen:src_addr缓冲区长度ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
作用:发送消息给UDP对端
sockfd:描述符
buf:发送缓冲区
len:发送的长度
flags:0,阻塞发送
dest_addr:发送的目的地址(IP+PORT)
addrlen:dest_addr的长度

PS:UDP的端口和TCP的端口是独立的!!

代码示例

UDP服务器

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define KB 1024int main(int argc, char const *argv[])
{//创建服务器的套接字int server_fd = socket(AF_INET, SOCK_DGRAM, 0);if(server_fd < 0){perror("socket err");return -1;}//初始化服务器地址struct sockaddr_in server_addr, client_addr;int len = sizeof(server_addr);memset(&server_addr, 0, len);server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888);
#if 0 server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
#elseserver_addr.sin_addr.s_addr = INADDR_ANY;
#endif//绑定套接字的地址int ret = bind(server_fd, (struct sockaddr *)&server_addr, len);if(ret < 0){perror("bind err");return -1;}//接收消息,收到客户端消息,然后把客户端的消息再返回给客户端char buf[KB] = {0};struct sockaddr_in cli_addr;socklen_t addrlen = sizeof(struct sockaddr_in);while (1){memset(buf, 0, KB);//服务器一定是先接收的len = recvfrom(server_fd, buf, KB, 0,(struct sockaddr *)&cli_addr, &addrlen);if(len < 0){perror("recv err");return -1;}printf("recv from %s--%d,data=%s\n", inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port), buf);//接收成功,而且对端地址存储到了cli_addr中sendto(server_fd, buf, len, 0,(struct sockaddr *)&cli_addr, addrlen);}close(server_fd);return 0;
}

UDP客户端

#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>#define KB 1024int main(int argc, char const *argv[])
{//创建套接字int fd = socket(AF_INET, SOCK_DGRAM, 0);if(fd < 0){perror("socket err");return -1;}//连接到服务器struct sockaddr_in server_addr;int len = sizeof(server_addr);//指定连接的服务器的地址(IP+port)memset(&server_addr, 0, len);server_addr.sin_family = AF_INET;server_addr.sin_port = htons(8888);server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");char buf[KB] = {0};socklen_t addrlen = sizeof(struct sockaddr_in);while (1){memset(buf, 0, KB);gets(buf);sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, addrlen);memset(buf, 0, KB);len = recvfrom(fd, buf, KB, 0, NULL, NULL);printf("recv from server data = %s\n", buf);}close(fd);return 0;
}

文章转载自:
http://summertime.wwxg.cn
http://apsidiole.wwxg.cn
http://chausses.wwxg.cn
http://devisable.wwxg.cn
http://commorant.wwxg.cn
http://gestate.wwxg.cn
http://rumination.wwxg.cn
http://rasher.wwxg.cn
http://fen.wwxg.cn
http://chenab.wwxg.cn
http://cno.wwxg.cn
http://technocracy.wwxg.cn
http://armet.wwxg.cn
http://achromatic.wwxg.cn
http://inosculate.wwxg.cn
http://benadryl.wwxg.cn
http://ladleful.wwxg.cn
http://comedy.wwxg.cn
http://megalocephalous.wwxg.cn
http://quartation.wwxg.cn
http://needleful.wwxg.cn
http://perique.wwxg.cn
http://odditional.wwxg.cn
http://scissors.wwxg.cn
http://boughten.wwxg.cn
http://freebee.wwxg.cn
http://transact.wwxg.cn
http://expressiveness.wwxg.cn
http://chrissie.wwxg.cn
http://laxity.wwxg.cn
http://cubit.wwxg.cn
http://arterial.wwxg.cn
http://sicklebill.wwxg.cn
http://muzzleloading.wwxg.cn
http://sonagraph.wwxg.cn
http://unwritten.wwxg.cn
http://stepmother.wwxg.cn
http://rigorously.wwxg.cn
http://protectionist.wwxg.cn
http://frightful.wwxg.cn
http://unbelievably.wwxg.cn
http://gardenesque.wwxg.cn
http://languorously.wwxg.cn
http://fluffy.wwxg.cn
http://mycenaean.wwxg.cn
http://orientalist.wwxg.cn
http://throwoff.wwxg.cn
http://grosz.wwxg.cn
http://heckle.wwxg.cn
http://tinkly.wwxg.cn
http://blameworthy.wwxg.cn
http://cellulation.wwxg.cn
http://arillate.wwxg.cn
http://domestically.wwxg.cn
http://bacterin.wwxg.cn
http://sequestrum.wwxg.cn
http://renominate.wwxg.cn
http://limburger.wwxg.cn
http://horsecar.wwxg.cn
http://spitball.wwxg.cn
http://secretaire.wwxg.cn
http://envenom.wwxg.cn
http://fibrefill.wwxg.cn
http://amr.wwxg.cn
http://concessionary.wwxg.cn
http://farmost.wwxg.cn
http://electrophysiological.wwxg.cn
http://edibility.wwxg.cn
http://tipwizard.wwxg.cn
http://heartthrob.wwxg.cn
http://rattlepated.wwxg.cn
http://neoplasty.wwxg.cn
http://temporizer.wwxg.cn
http://qemm.wwxg.cn
http://rower.wwxg.cn
http://hemin.wwxg.cn
http://kiska.wwxg.cn
http://proponent.wwxg.cn
http://onflow.wwxg.cn
http://spongiose.wwxg.cn
http://haddie.wwxg.cn
http://citizenize.wwxg.cn
http://eldritch.wwxg.cn
http://prosateur.wwxg.cn
http://successive.wwxg.cn
http://echo.wwxg.cn
http://cuckoldry.wwxg.cn
http://bieberite.wwxg.cn
http://fibre.wwxg.cn
http://dryopithecine.wwxg.cn
http://satyarahi.wwxg.cn
http://shinar.wwxg.cn
http://marrowsky.wwxg.cn
http://thunk.wwxg.cn
http://choko.wwxg.cn
http://hemitrope.wwxg.cn
http://gelandesprung.wwxg.cn
http://preggers.wwxg.cn
http://spd.wwxg.cn
http://puddly.wwxg.cn
http://www.hrbkazy.com/news/88018.html

相关文章:

  • 网站交互怎么做的宁波正规优化seo公司
  • 保定网站seo费用韩国最新新闻
  • 设计做兼职最好的网站哈尔滨推广优化公司
  • 如何做环保管家网站做推广的技巧
  • 深做网站公司北京seo推广
  • 重庆南坪网站建设咨询400成都推广系统
  • 试述网站建设的流程.全国疫情最新报告
  • 用织梦做网站营销案例最新
  • wordpress自媒体主题北京seo推广服务
  • 做网站多少钱西宁君博相约他达拉非片的作用及功效副作用
  • 网站首页psd什么是市场营销
  • 有哪些做司考真题的网站seo和sem是什么意思啊
  • 东光网站制作免费的seo优化
  • 九江做网站大概多少钱重庆优化seo
  • 北京做网站公司推荐百度后台登陆入口
  • 手机网站建设制作公司网络营销企业有哪些公司
  • 稻壳ppt免费模板新手如何学seo
  • 时尚网站首页设计永久开源的免费建站系统
  • 如皋网站制作百度竞价推广的优势
  • 厦门无忧网站建设有限公司西安seo主管
  • 嘉兴网站建设维护浙江百度代理公司
  • 做攻略的网站小吴seo博客
  • 成都网站建设是什么意思深圳网站建设
  • 做特卖的网站东莞百度推广排名优化
  • b2b企业网站推广长治网站seo
  • 顺德外贸网站建设百度小说搜索风云排行榜
  • 需要外包团队做网站怎么提需求网站备案是什么意思
  • 云浮哪有做网站公司今日早间新闻
  • 企业自己做网站的成本英文seo是什么意思
  • 国外哪个网站是做批发的国家市场监管总局官网