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伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
香港最便宜的vps要多少钱?最便宜的香港vps能用吗?香港vps无需备案,整体性能好,而且租用价格便宜,使用灵活,因为备受站长喜爱。无论是个人还是企业建站,都比较倾向于选择香港VPS。最便宜的香港vps能用吗?正因为有着诸多租用优势,香港VPS在业内颇受欢迎,租用需求量也在日益攀升。那么,对于新手用户来说,香港最便宜的vps租用有四大要点是务必要注意的,还有易探云香港vps租用最便宜的月付仅18元...
Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...
Vultr 商家有新增韩国首尔机房,这个是继日本、新加坡之后的第三个亚洲机房。不过可以大概率知道肯定不是直连中国机房的,因为早期的日本机房有过直连后来取消的。今天准备体验看看VULTR VPS主机商的韩国首尔机房的云服务器的速度和性能。1、全球节点PING速度测试这里先通过PING测试工具看看全球几十个节点的PING速度。看到好像移动速度还不错。2、路由去程测试测试看看VULTR韩国首尔机房的节点...
socket通信为你推荐
chinapay贝宝和支付宝的区别winhttp什么是WinHTTP数据监测毕业论文检测,万方数据检测结果可靠吗?跟知网的有多少差距啊?求以往学长学姐解释。腾讯公告腾讯出什么事了 所有QQ用户空间农场什么的都打不开 有的连空间都进不去 又受攻击了?网络审计网络审计和传统审计的范围有什么变化印度尼西亚国家代码手机上的国家代码是什么数据统计分析表如何用Excel做数据分析?kjava通用KJava是什么意思什么是网络地址什么是IP地址?红牛下架红牛 为什么全国下架
域名注册申请 国外虚拟主机 openv enom z.com 香港新世界电讯 回程路由 xfce 大容量存储 镇江联通宽带 英文站群 免费网站申请 中国智能物流骨干网 ftp教程 国外免费全能空间 网站cdn加速 最漂亮的qq空间 华为云盘 厦门电信 帽子云排名 更多