客户端接收函数-字节到字符串
C++ - Client recv function - Bytes to string
我来这里是因为我有问题与recv()函数。我正试图编码一个TC/IP客户端,它将从服务器接收数据(我没有访问服务器代码,它是一个。exe)。我能够连接和接收数据,但我不能使用它们。通常我应该收到一个字符串,但在字节码。
int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);//Initialisation du DLL,MAKEWORD(2,0) pour dire que c'est la V2,adresse de la variable qui lance le DLL
string convert;
long succes;
SOCKADDR_IN sin;//info du socket
int sock, bytes_recieved, bytes_send;
char send_data[1024], recv_data[2048];
struct hostent *host;
struct sockaddr_in server_addr;
host = gethostbyname("127.0.0.1");
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("SocketError");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(50500);
server_addr.sin_addr = *((struct in_addr *) host->h_addr);
bzero(&(server_addr.sin_zero), 8);
if (connect(sock, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))
== -1) {
perror("ConnectToError");
exit(1);
}
//bytes_send = send(sock, a, strlen(a), 0);
//bytes_send = shutdown(sock, 1);
bytes_recieved = recv(sock, recv_data, 2048, 0); recv_data[bytes_recieved] = ' ';
printf("nRecieved data = %s ", recv_data);
cout << endl << endl;
shutdown(sock, 2);
system("PAUSE");
WSACleanup();
return 0;
}
I have value into my array:数组值但是我不知道如何将它们转换成字符串,它应该遵循以下顺序:
[0:3]字符串的大小
[4:n-2]字符串,每个字母占用2字节
[n-1:n]结束符号
谢谢你的帮助
wendelbsilva已经发布了答案,但它是在评论中。
两次呼叫recv
。第一次调用为4字节。像这样:
unsigned int len;
assert(sizeof(len) == 4);
data_receive = recv(sock, &len, 4);
然后你可以读取真正的字符串。
std::vector<wchar_t> input(len+1);
if(data_receive = recv(sock, input.data(), len) != -1)
我在网上阅读了一些东西后修改了一些代码,使其更清晰:
void reception()
{
wchar_t input[2048];
wstring message;
unsigned int data_receive;
if(data_receive = recv(sock,(char*) input, 2048, 0) != -1)
{
message = input;
std::wofstream fs("testout.txt");
fs << message << std::flush;
//cout << input[0]<<endl;
system("PAUSE");
}
}
现在我有一个字节数组,我想,但我不知道如何解析它。我想我的输入数组是UTF16。查看数组值:array view
相关文章:
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 如何在连接器 C++ 中将原始字节转换为字符串
- 将字符串转换为无符号字符数组/字节数组
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 如何在 c++ 中读取用 utf-8 编码的 java unicode 字节字符串
- 如何在C++中将十六进制字符串转换为字节字符串?
- 如何生成伪随机 32 字节字符串以用作加密哈希函数中的盐?
- C++将字节字符串转换为普通字符串
- 将"8 bit"(字节)字符串写入二进制文件?
- 如何使用Boost Ptree来解析像中国人这样的宽字节字符串?Boost版本是Boost_1_64_0
- 以C++输出多字节字符串
- C/C++ isspace() 跳过多字节字符串字符
- 将解码的 Base64 字节字符串转换为布尔向量
- 将字节字符串转换为 float[] arry in C++
- 编码字节字符串的URL
- C++如何将整数和浮点等数据类型封送为字节字符串
- 取字节字符串的模数
- 将宽字符串与 ifstream::open 一起使用,或者将多字节字符串与 CreateProcess 一起使用
- c++中多字节字符串的URL编码
- 将字节字符串转换为无符号int