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伏交流电,有的则提供有线电视节目。
客户软件将插头插到不同编号的插座,就可以得到不同的服务。
前天,还有在"Hostodo商家提供两款大流量美国VPS主机 可选拉斯维加斯和迈阿密"文章中提到有提供两款流量较大的套餐,这里今天看到有发布四款庆祝独立日的七月份的活动,最低年付VPS主机13.99美元,如果有需要年付便宜VPS主机的可以选择商家。目前,Hostodo机房可选拉斯维加斯和迈阿密两个数据中心,且都是基于KVM虚拟+NVMe整列,年付送DirectAdmin授权,需要发工单申请。(如何...
美国服务器哪家平台好?美国服务器无需备案,即开即用,上线快。美国服务器多数带防御,且有时候项目运营的时候,防御能力是用户考虑的重点,特别是网站容易受到攻击的行业。现在有那么多美国一年服务器,哪家的美国云服务器好呢?美国服务器用哪家好?这里推荐易探云,有美国BGP、美国CN2、美国高防、美国GIA等云服务器,线路优化的不错。易探云刚好就是做香港及美国云服务器的主要商家之一,我们来看一下易探云美国云服...
腾讯云轻量应用服务器又要免费升级配置了,之前已经免费升级过一次了(腾讯云轻量应用服务器套餐配置升级 轻量老用户专享免费升配!),这次在上次的基础上再次升级。也许这就是良心云吧,名不虚传。腾讯云怎么样?腾讯云好不好。腾讯云轻量应用服务器 Lighthouse 是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供...
socket通信为你推荐
avb医学avb是什么意思qq业务查询我想查看QQ业务的到期时间,怎么查?知识分享平台知识付费平台有哪些?chrome系统Chromenbsp;OS是操作系统吗?vga接口定义VGA接口通常用来连接哪些设备,各个脚代表什么意思,它的连线是如何焊接的?搜索引擎的概念搜索引擎的工作原理是什么及发展历史搜索引擎的概念搜索引擎营销的概念是什么?自定义表情qq自定义表情小四号字word里的小四号字在Photoshop里是指多少点字体?jstz谁有101网校的账号?
sugarhosts 腾讯云盘 韩国俄罗斯 国外服务器 42u标准机柜尺寸 回程路由 全能主机 什么是刀片服务器 cdn加速是什么 网通服务器托管 1美金 如何安装服务器系统 免费mysql数据库 根服务器 免费邮件服务器 双线asp空间 个人免费邮箱 香港ip 架设代理服务器 qq空间打开很慢 更多