2015-08-31 43 views
-1

我只想通过套接字发送一个整数,但似乎sendto套接字命令只接受一个字符。我正在努力将我的int更改为一个字符通过套接字发送它。 request_number是我想要更改为request_char的char的int。在TCP套接字连接上发送int值

我无法访问atoi/atof等命令,所以我在这里尝试了sprintf。但是,当我运行它什么也不做,甚至不打印出价值。我的sprintf命令有什么问题?或者有什么其他的方式来避免这种转换时发送一个INT套接字的TCP套接字?

int request_number= 100; 
char request_char[request_number]; 

    sprintf(request_char, "%i", request_number); 
    send(tcp_new_socket , request_char , strlen(request_char) , 0); 

此外,当我收到我的套接字的另一端的值,我怎么把它变回int?相同类型的sprintf命令?预先感谢您的帮助。让我知道是否需要详细说明任何事情。

+0

您需要先设计一个协议,然后再实施一个协议。看看TCP上分层的其他协议(如HTTP,IRC或SMTP)的规范,看看应该如何完成。 –

回答

-1

发送到网络的任何东西都是以字节为单位的...所以无符号字节是字符,所以你可以看到发送API是字符数组。

在另一边,您将收到现在基于协议字节[由您定义] 当您收到您需要从字节构建整型

希望这有助于

+0

为什么downvote?请解释我提供了为什么网络api是字节数组以及接收方应该做些什么的细节.. –

0

所有我想要做的是通过套接字发送一个整数,但似乎sendto套接字命令只接受一个字符。

错误。它接受char *

我正在努力改变我的int到一个字符通过套接字发送它。

当然,你是。 int不适合char,你不需要这样做。只需提供int的地址并将其投射到char *即可。

int request_number= 100; 
char request_char[request_number]; 

sprintf(request_char, "%i", request_number); 
send(tcp_new_socket , request_char , strlen(request_char) , 0); 

此代码不符合您给出的描述。这里没有任何东西可以将int转换成char。有代码将它转换为一个char[]数组,以ASCII形式发送,但这并不是你说的你想要做的。仅发送二进制的int

int request_number = 100; 
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0); 

并且相反地在接收器处。然而,你真的应该发送int网络字节顺序:

int request_number = htons(100); 
send(tcp_new_socket , (char*)&request_number , sizeof request_number, 0); 

,并使用ntohs()在接收器把它放回主机顺序。

0

您不需要执行转换。套接字可以发送任何类型的数据。只需将int地址转换为char *并为套接字指定指针和字节数。