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伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
云步云怎么样?云步云是创建于2021年的品牌,主要从事出售香港vps、美国VPS、日本VPS、香港独立服务器、香港站群服务器等,机房有香港、美国、日本东京等机房,目前在售VPS线路有CN2+BGP、CN2 GIA,香港的线路也是CN2直连大陆,该公司旗下产品均采用KVM虚拟化架构。目前,云步云提供香港安畅、沙田、大浦、葵湾、将军澳、新世界等CN2机房云服务器,2核2G5M仅72.5元/月起。点击进...
Hostodo发布了几款采用NVMe磁盘的促销套餐,从512MB内存起,最低年付14.99美元,基于KVM架构,开设在拉斯维加斯机房。这是一家成立于2014年的国外VPS主机商,主打低价VPS套餐且年付为主,基于OpenVZ和KVM架构,产品性能一般,数据中心目前在拉斯维加斯和迈阿密,支持使用PayPal或者支付宝等付款方式。下面列出几款NVMe硬盘套餐配置信息。CPU:1core内存:512MB...
目前,我们都在用哪个FTP软件?喜欢用的是WinSCP,是一款免费的FTP/SFTP软件。今天在帮助一个网友远程解决问题的时候看到他用的是FlashFXP FTP工具,这个工具以前我也用过,不过正版是需要付费的,但是网上有很多的绿色版本和破解版本。考虑到安全的问题,个人不建议选择破解版。但是这款软件还是比较好用的。今天主要是遇到他的虚拟主机无法通过FTP连接主机,这里我就帮忙看看到底是什么问题。一...
socket通信为你推荐
视频压缩算法MP4视频压缩,比特率如何计算。知识分享平台知识付费平台有哪些?vga接口定义VGA接口通常用来连接哪些设备,各个脚代表什么意思,它的连线是如何焊接的?awvAWV的转换器 要免费的 看好是AWV不是AMVqq网络硬盘怎么用qq网络硬盘数据统计分析表如何用Excel做数据分析?单元测试规范单元测试用例该怎么写papertiger亚瑟士 艾斯克斯 tiger有什么区别吗文本框透明word里文本框怎么透明?河北云办税厅河北省商务厅的人员编制
联通vps 3322免费域名 site5 空间打开慢 一点优惠网 国外网站代理服务器 丹弗 国外免费全能空间 idc查询 怎么建立邮箱 drupal安装 腾讯总部在哪 中国电信测速器 阿里云免费邮箱 东莞服务器托管 个人免费邮箱 广州虚拟主机 中国linux 贵阳电信测速 主机返佣 更多