int acceptSocket;
char buf[100];
long sentbytes;
socklen_t len;
int port = 18227;
int CreateSocket()
{
long rc;
struct sockaddr_in addr, client;
// Socket creation for UDP
acceptSocket=socket(AF_INET,SOCK_DGRAM,0);
if(acceptSocket==-1)
{
printf("Failure: socket creation is failed, failure code\n");
return 1;
}
else
{
printf("Socket started!\n");
}
memset(&addr, 0, sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(port);
addr.sin_addr.s_addr=htonl(INADDR_ANY);
rc=bind(acceptSocket,(struct sockaddr*)&addr,sizeof(addr));
if(rc== -1)
{
printf("Failure: listen, failure code:\n");
return 1;
}
else
{
printf("Socket an port %d \n",port);
}
while(rc!=-1)
{
len =sizeof(client);
rc=recvfrom(acceptSocket,buf, sizeof(buf), 0, (struct sockaddr*) &client, &len);
if(rc==0)
{
printf("Server has no connection..\n");
break;
}
if(rc==-1)
{
printf("something went wrong with data %s", strerror(errno));
break;
}
XcpIp_RxCallback( (uint16) rc, (uint8*) buf, (uint16) port );
makeTimer("First Timer", &firstTimerID, 2, 2); //2ms
makeTimer("Second Timer", &secondTimerID, 10, 10); //10ms
makeTimer("Third Timer", &thirdTimerID, 100, 100); //100ms
}
close(acceptSocket);
return 0;
}
int main()
{
Xcp_Initialize();
CreateSocket();
return 0;
}
//API for sending the data to the client.
void XcpApp_IpTransmit( uint16 XcpPort, Xcp_StatePtr8 pBytes, uint16 numBytes )
{
struct sockaddr_in client;
if ((long)XcpPort==port){
sentbytes = sendto(acceptSocket,(char*)pBytes,(long)numBytes,0, (struct sockaddr*)&client, sizeof(client));
}
XcpIp_TxCallback(port,(uint16)sentbytes);
}
我创建了一个服务器端程序,用于从客户端接收数据并将响应发送回客户端。我能够通过recvfrom api从客户端接收数据,但后来我必须通过XcpApp_IpTransmit(uint16 XcpPort、Xcp_StatePtr8 pBytes、uint16 numBytes)中的sendto api将响应发送回客户端;(这是我的项目中支持的用于传输数据的api)。客户端是将数据发送到指定端口和ip地址的工具。我可以再次使用struct sockaddr_in客户端吗;在Transmit api中??有人能帮我吗??
这应该有效。当您使用 SOCK_DGRAM
时,您始终可以使用收到的地址(通常及其大小)发回数据。当然,例外情况包括对等套接字不可用的情况。
或者,如果您只有一个客户端,您可以使用< code>connect来设置默认远程对等地址,并且< code>send将使用它:
sockaddr_in addr;
socklen_t len;
len = sizeof(addr);
x = recvfrom(socket,buf, sizeof(buf), 0, (struct sockaddr*) &addr, &len);
connect(socket, (struct sockaddr*)addr, len);
...
send(socket, buf, bufsize, 0);
send(socket, buf, bufsize, 0);
send(socket, buf, bufsize, 0);
不过有一条评论。您正在使用AF_INET,您的代码将正常工作。但您也可以使其与其他协议兼容。为此:
sockadd_storage addr;
socklen_t len;
len = sizeof(addr);
x = recvfrom(socket,buf, sizeof(buf), 0, (struct sockaddr*) &addr, &len);
...
sendto(socket,buf,bufsize,0,(struct sockaddr*)addr, len);
这种类型的代码可以与任何数据报协议一起使用,包括AF_LOCAL和AF_INET6。
<code>结构sockaddr_in客户端是否用于初始化错误的传输API?
所以你必须使用初始化的套接字结构。从上面的代码中,您可以成功地从客户端接收数据,但无法发送,因为您在传输函数中的< code>client结构是< code > NULL nothing initialized,那么该去哪里呢?
你可以做这样的事情
rc=recvfrom(acceptSocket,buf, sizeof(buf), 0, (struct sockaddr*) &client, &len);
sendto(acceptSocket,buf,rc,0,(struct sockaddr *)&client,sizeof(client));
或者将客户端
结构传递给您的传输函数,如下所示
void XcpApp_IpTransmit( uint16 XcpPort, Xcp_StatePtr8 pBytes, uint16 numBytes,struct sockaddr* client )
{
if ((long)XcpPort==port){
sentbytes = sendto(acceptSocket,(char*)pBytes,(long)numBytes,0, (struct sockaddr*)&client, sizeof(client));
}
XcpIp_TxCallback(port,(uint16)sentbytes);
}
sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的
因为笔者一直都是使用 CentOS,所以这次安装系统也是基于CentOS的安装。把光盘插入光驱,设置bios光驱启动。进入光盘的欢迎界面。也可参考Ubuntu 12.04 安装教程详细步骤。 其中有两个选项,可以直接按回车,也可以在当前界面下输入 linux text 按回车。前者是图形下安装,可以动鼠标的,后者是纯文字形式的。建议初学者用前者安装。直接回车后,出现一下界面: 这一步是要提示你是否
1981 年IBM 公司推出享誉全球的微型计算机IBM PC。在1981-1991 年间,MS-DOS 操作系统一直是微型计算机上操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。当时Apple 的MACs 操作系统可以说是性能最好的,但是其天价没人能够轻易靠近。 当时的另一个计算机技术阵营是Unix世界。但是Unix操作系统就不仅是价格贵的问题了。为了寻求高利率,Unix
通过前面的小节学习,我们已经对 Linux 操作系统有了简单的了解,同时也在 Windows 下安装了虚拟机软件 VMware ,那么本节课我们就介绍下如何使用虚拟机软件安装 Linux 操作系统。 通过第一小节的学习我们知道 Linux 有很多的发行版本,本小节以 CentOS 8 为例来介绍 Linux 操作系统的安装步骤。学习本小节之后读者可以按照本小节的介绍步骤,安装其他的 Linux 操
我最近开始学习Docker,知道它只需要一个简单的命令就可以在容器中创建和运行Ubuntu。 我还知道docker-machine使用VirtualBox以非常得心应手的方式创建Linux OS。 那么它们之间有什么区别呢?
操作系统提供的服务 操作系统的五大功能,分别为:作业管理、文件管理、存储管理、输入输出设备管理、进程及处理机管理 中断 所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类: 内部异常中断:由计算机硬件异常或故障引起的中断; 软中断:由程序中执行了引起中断的指令而造成