0

您好,我正在尝试在 C++ 上创建 2 个通过 TCP 套接字进行通信的程序。我知道如何使用 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

测试

你能帮助我吗?提前致谢!考虑到连接和套接字工作正常!

4

2 回答 2

1

您在这里有很多问题...我会尝试向您指出一些问题,但要考虑到其中一些是关于 C++ 基础知识的。

首先,在:

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 chars "Hello", "wold" 所在的位置,并丢失在 "char[i]=new char[25]" 中分配的内存。注意内存操作。

考虑到这一点,您不知道“Hello\0”之后的值的内容,并且您正在尝试发送 125 个连续字节...

按照其他顺序,在:

 void sendtosocket(.. , char array[]) { 
    int size=5*sizeof(char[25]);
    write(sock, &size, sizeof(int))
        write(sock,&array,size); 
}

我假设您正在考虑数组在连续内存中。好吧,这是绝对错误的。请检查变量的初始化,并考虑如何发送它。

于 2013-05-24T10:44:18.130 回答
0

这显然是错误的:

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");
于 2013-05-24T10:54:38.013 回答