C 如何使用收到的IP地址和端口号进行套接字连接
如何使用inet_addr()为变量a、b、c和d分配IP地址 以便我可以发送数据:C 如何使用收到的IP地址和端口号进行套接字连接,c,sockets,C,Sockets,如何使用inet_addr()为变量a、b、c和d分配IP地址 以便我可以发送数据: a=rcvsdheader->Option.IPv4Address>>24; //printf("the msb of ipv4 is %d\n",a); b=rcvsdheader->Option.IPv4Address>>16&0x000000FF; //printf("the msb of ipv4 is %d\n",b); c=rcvsdheader->
a=rcvsdheader->Option.IPv4Address>>24;
//printf("the msb of ipv4 is %d\n",a);
b=rcvsdheader->Option.IPv4Address>>16&0x000000FF;
//printf("the msb of ipv4 is %d\n",b);
c=rcvsdheader->Option.IPv4Address>>8&0x000000FF;
//printf("the msb of ipv4 is %d\n",c);
d=rcvsdheader->Option.IPv4Address&0x000000FF;
//printf("the msb of ipv4 is %d\n",d);
if(rcvsdheader->Option.Protocol==UDP)
printf("The Type of Protocol is UDP\n");
printf("The PortNumber i%d\n",rcvsdheader->Option.Portnumber);
e=rcvsdheader->Option.Portnumber;
if ( (s=socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
die("socket");
}
someipServeraddr.sin_family = AF_INET;
someipServeraddr.sin_addr.s_addr=inet_addr();
someipServeraddr.sin_port = htons(e);
inet\u addr
将包含IPv4地址文本表示形式的字符串作为参数:
in_addr_t inet_addr(const char *cp);
inet\u addr()
函数将Internet主机地址cp从IPv4数字和点符号转换为网络字节顺序的二进制数据。如果输入无效,INADDR\u NONE
(通常-1
)
他回来了。使用此函数有问题,因为-1是有效地址(255.255.255.255)。避免将其用于inet\u aton()
,inet\u pton(3)
,或getaddrinfo(3)
,它们提供了
指示错误返回的更简洁的方法
因此,我们可以使用sprintf
制作一个:
char buf[16];
sprintf(buf, "%u.%u.%u.%u", a, b, c, d);
someipServeraddr.sin_addr.s_addr = inet_addr(buf);
然而,所有这些都是毫无意义的s_addr
在_addr_t中属于类型,它是POSIX上uint32_t
的typedef
,因此您可以直接使用rcvsdheader->Option.IPv4Address
:
someipServeraddr.sin_addr.s_addr = htonl(rcvsdheader->Option.IPv4Address);
(htonl
如果IPv4Address
包含主机字节顺序的地址,则需要htonl
,例如,作为整数返回0x7F000001
;如果您知道您的地址是网络顺序的,请不要使用htonl
)。someipServeraddr.sin_addr.s_addr
是POSIX上的uint32_t
,只需将您的IPv4地址分配给someipServeraddr.sin\u addr.s\u addr
,htonl
ed即可。亲爱的Haapala,我想将变量a、b、c和d传递给inet\u addr()函数谢谢你,Haapala。它工作得很好。我选择sprintf是因为我的系统中的另一个函数需要bufcode@YallamandaDosakayala然后你可能会考虑亲爱的哈帕拉,你知道任何关于汽车协议,如CAN或大多数或套接字编程与线程,如果你知道我正在做一个新的汽车项目,你能不能给我一个指导,但是如果你还有其他问题要问,你应该发布另一个问题。将我的c代码(在Linux平台上开发)移植到micrium OS我想将简单的hello world程序交叉编译移植到micrium OS