你好,我正在尝试创建2个通过TCP套接字通信的程序,在c++上。我知道如何使用write()和read()函数,但是当我尝试将数组从一个程序发送到另一个程序时,我遇到了一个问题。更具体地说,我试着从一边发送一个字符数组,并将其读取到另一边,但它不工作。
我尝试发送的数组定义如下:
char** list=new char[5];
for(int i=0;i<5;i++){
char[i]=new char[25]
}
char[0]="Hello";
char[1]="world";
char[2]="this";
char[3]="is";
char[4]="a test";
,我这样写它到套接字:
void sendtosocket(.. , char array[]) {
int size=5*sizeof(char[25]);
write(sock, &size, sizeof(int))
write(sock,&array,size);
}
从另一个角度看,我试着这样读:
void readfromsocket(..){
read(sock, &size, sizeof(int));
char test[5][25];
cout<<size<<" bytes must be read"<<endl;
read(newsock,&test,size);
for(int i=0;i<5;i++)
cout<<test[i]<<endl;
}
我得到的输出是
我必须读125字节
你好s
测试
你能帮我吗?提前感谢!考虑连接和套接字工作正常!
你有很多问题…我将试着指出一些问题,但要考虑到其中一些问题是关于c++基础的。
首先,in:
char** list=new char[5];
for(int i=0;i<5;i++){
char[i]=new char[25]
}
char[0]="Hello";
char[1]="world";
char[2]="this";
char[3]="is";
char[4]="a test";
你没有填充你的数组,或者至少你没有分配内存。您正在将数组的指针指向const字符"Hello","wold"所在的位置,并丢失在"char[i]=new char[25]"中分配的内存。注意内存操作
考虑到这一点,你不知道"Hello "之后的值的内容,你试图发送125个连续字节…
换句话说,在:
void sendtosocket(.. , char array[]) {
int size=5*sizeof(char[25]);
write(sock, &size, sizeof(int))
write(sock,&array,size);
}
我假设您正在考虑数组在连续内存中。这是绝对错误的。请检查变量的初始化,并考虑如何发送。
这显然是错误的:
char** list=new char[5];
for(int i=0;i<5;i++){
char[i]=new char[25]
}
char[0]="Hello";
char[1]="world";
char[2]="this";
char[3]="is";
char[4]="a test";
你的意思可能是:
#include<iostream>
#include<cstring>
char* list[5];
for(int i = 0; i < 5; ++i){
list[i]=new char[25];
}
std::strcpy(list[0], "Hello");
std::strcpy(list[1], "world");
std::strcpy(list[2], "this");
std::strcpy(list[3], "is");
std::strcpy(list[4], "a test");