socket通信Socket异步通信
socket通信 时间:2021-06-07 阅读:(
)
Socket通信编程与上网方式(wifi,有线,无限上网卡等)有什么关系吗?
没有关系,socket通信编程对物理网络媒介类型不敏感。
分两种情形说明:
1. 在设备系统内部,socket不需要通过网络进行通信,所以系统内部的socket通信不依赖上网方式。
2. 在不同设备之间,socket通信一般基于IPv4/IPv6,而IP的一大功能就是屏蔽了网络层以下(包括链路层和物理层)的不同特征,使应用程序在使用IP报文进行通信时在任何网络媒介上都使用相同的方式。
socket在IP之上,更不需要考虑物理网络是有线还是无线等因素。
socket编程,只需要掌握几个socket接口的使用,理清socket通信对象就可以了。
怎么利用socket实现进程间通信
用socket实现进程通信 ,和socket的普通用法一样,只不过服务端IP为127.0.0.1 而已
下面附上代码示例:
//服务器端代码?进程1
#include?
#include?
#include?
#include?
#include?/in.h>
#include?
#include?
#include?
int?main(int?argc,?char?*argv[])
{
int?sock;
//sendto中使用的对方地址
struct?sockaddr_in?toAddr;
//在recvfrom中使用的对方主机地址
struct?sockaddr_in?fromAddr;
int?recvLen;
unsigned?int?addrLen;
char?recvBuffer[128];
sock?=?socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if(sock?0)
{
?printf("创建套接字失败了.
");
?exit(0);
}
memset(&fromAddr,0,sizeof(fromAddr));
fromAddr.sin_family=AF_INET;
fromAddr.sin_addr.s_addr=htonl(INADDR_ANY);
fromAddr.sin_port?=?htons(4000);
if(bind(sock,(struct?sockaddr*)&fromAddr,sizeof(fromAddr))<0)
{
?printf("bind()?函数使用失败了.
");
?close(sock);
?exit(1);
}
while(1){
addrLen?=?sizeof(toAddr);
if((recvLen?=?recvfrom(sock,recvBuffer,128,0,(struct?sockaddr*)&toAddr,&addrLen))<0)
{
?printf("()recvfrom()函数使用失败了.
");
?close(sock);
?exit(1);
}
if(sendto(sock,recvBuffer,recvLen,0,(struct?sockaddr*)&toAddr,sizeof(toAddr))!=recvLen){
printf("sendto?fail
");
close(sock);
exit(0);
}
return?0;
}
}?//客户端代码?进程2
#include?
#include?
#include?
#include?
#include?/in.h>
#include?
#include?
#include?int?main(int?argc,?char?*argv[])
{
if(argc?2)
{
?printf("请输入要传送的内容.
");
?exit(0);
}
int?sock;
//sendto中使用的对方地址
struct?sockaddr_in?toAddr;
//在recvfrom中使用的对方主机地址
struct?sockaddr_in?fromAddr;unsigned?int?fromLen;
char?recvBuffer[128];
sock?=?socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);if(sock?0)
{
?printf("创建套接字失败了.
");
?exit(1);
}memset(&toAddr,0,sizeof(toAddr));
toAddr.sin_family=AF_INET;
toAddr.sin_addr.s_addr=_addr("127.0.0.1");
toAddr.sin_port?=?htons(4000);if(sendto(sock,argv[1],strlen(argv[1]),0,(struct?sockaddr*)&toAddr,sizeof(toAddr))?!=?strlen(argv[1]))
{
?printf("sendto()?函数使用失败了.
");
?close(sock);
?exit(1);
}fromLen?=?sizeof(fromAddr);
if(recvfrom(sock,recvBuffer,128,0,(struct?sockaddr*)&fromAddr,&fromLen)<0)
{
?printf("()recvfrom()函数使用失败了.
");
?close(sock);
?exit(1);
}
printf("recvfrom()?result:%s
",recvBuffer);
close(sock);}Socket异步通信
1、所谓同步,可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其他的命令。
2、异步,就是分时处理,服务器接收到客户端请求后并不是立即处理,而是等待服务器比较空闲的时候加以处理,可以避免涌塞。
Socket:
1、网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
2、Socket的英文原义是“孔”或“插座”。
作为BSD UNIX的进程通信机制,取后一种意思。
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
在上的主机一般运行了多个服务软件,同时提供几种服务。
每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。
Socket正如其英文原意那样,像一个多孔插座。
一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
印象云,成立于2019年3月的商家,公司注册于中国香港,国人运行。目前主要从事美国CERA机房高防VPS以及香港三网CN2直连VPS和美国洛杉矶GIA三网线路服务器销售。印象云香港三网CN2机房,主要是CN2直连大陆,超低延迟!对于美国CERA机房应该不陌生,主要是做高防服务器产品的,并且此机房对中国大陆支持比较友好,印象云美国高防VPS服务器去程是163直连、三网回程CN2优化,单IP默认给20...
今天有看到Raksmart账户中有一台VPS主机即将到期,这台机器之前是用来测试评测使用的。这里有不打算续费,这不面对万一导致被自动续费忘记,所以我还是取消自动续费设置。如果我们也有类似的问题,这里就演示截图设置Raksmart取消自动续费。这里我们可以看到上图,在对应VPS主机的【其余操作】中可以看到默认已经是不自动续费,所以我们也不要担心被自动续费的。当然,如果有被自动续费,我们确实不想续费的...
georgedatacenter怎么样?georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,大家可以根据自己的需要入手。georgedatacenter是一家成立于2019年的美国vps商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacen...
socket通信为你推荐
virusscanvirus scan 是个什么软件?腾讯年终奖腾讯工作怎么样asp大马一句话木马中的大马和小马的作用各是什么?activitygroupActivityGroup子activity之间的切换效果怎么实现数据库界面数据库怎么进入界面点心os移动OMS系统跟点心OS系统,他两不是都基于Android改造出来的么?差别在哪?点心os点心操作系统?监控插件千里眼监控软件怎么使用啊?软件开发技术文档软件开发文档重要吗?anyradio手机听广播要下载什么,不在家的收听要用流量吗?
独立ip虚拟主机 新通用顶级域名 vir 电信测速器 hostmaster 大硬盘 腾讯云数据库 bash漏洞 godaddy域名优惠码 evssl 网页背景图片 国外php空间 彩虹ip 美国十次啦服务器 架设服务器 服务器维护方案 php空间购买 能外链的相册 卡巴斯基是免费的吗 银盘服务 更多