使用C ++中的套接字通过网络发送字符串

时间:2015-08-09 03:04:28

标签: c++ sockets networking tcp

我遇到通过TCP网络发送字符串的问题,其中字符串正在发送未输入的其他字符。

例如,当我输入以下字符串时......

我在接收端得到以下结果。

以下是我用来发送字符串的代码。

time / 2

以下是用于收集字符串的代码。

string input;
printf("Please input what you want to send...\n");
printf(">");
cin >> input;

const char* ch = (const char*)&input;
int lengthOfBytes = sizeof(input);

for (int i = 0; i < lengthOfBytes; i++)
{
   n = send(socket_d, &*ch, 10, 0);
}

//Reading in characters.
if (ch == (const char*)'\r')
{
   cout << "\n";
}

通过网络发送字符串时我做错了什么?

3 个答案:

答案 0 :(得分:5)

您完全误解了如何从std::string对象访问字符串数据。您需要使用方法std::string::data()std::string::size()来获取字符串数据,如下所示:

<强>发件人:

std::string input;

std::cout << "Please input what you want to send...\n";
std::cout << "> ";

cin >> input;

n = send(socket_d, input.data(), input.size(), 0);

// check for errors here..

我没有窗户,所以我的客户代码可能与您需要的不同,但可能有点像这样:

<强>接收器:

std::string s;

int n;
char buf[256];

while((n = recv(socket_d, buf, sizeof(buf), 0)) > 0)
    s.append(buf, buf + n);

if(n < 0)
{
    std::err << std::strerror(errno) << '\n';
    return 1; // error
}

// use s here

std::cout << "received: " << s << '\n';

答案 1 :(得分:4)

发送字符串时,你所做的一切都是错误的。 ch不是指向字符串字符的指针。 lengthOfBytes不是字符串字符的长度。去研究使用字符串类的基础知识。

答案 2 :(得分:0)

const char* ch = (const char*)&input;
int lengthOfBytes = sizeof(input);

您必须按如下方式更正上述代码段:

int lengthOfBytes = input.length()+1;
char * ch = new char [lengthOfBytes ];
std::strcpy (ch, input.c_str());