2013-10-08 57 views
-1

下面的代碼是從server.c片段發送通過插座的字符串客戶

void list(int s) 
{ 
vector<data> getList = readContent(); 
string output = ""; 
ostringstream conv; 

for(int j = 0; j < readContent().size(); j++) 
{ 
    conv << getList[j].record; 

    output += conv.str(); 
    output += "  "; 
    output += getList[j].fName; 
    output += " "; 
    output += getList[j].lName; 
    output += " "; 
    output += getList[j].phoneNum; 
    output += "\n"; 

    send(s, (char *)output.c_str(), strlen((char *)output.c_str()), 0); 
} 
} 

readContent給我結構的與值的陣列(記錄,FNAME,L-NAME和PHONENUM)

陣列中的當前數據是:

1000史蒂夫套件212
1001喬SMO 12
1002將沃爾特33

下面的代碼是從client.c

/* main loop; get and send lines of text */ 
while (fgets(buf, sizeof(buf), stdin)) { 
    buf[MAX_LINE -1] = '\0'; 
    len = strlen(buf) + 1; 
    send (s, buf, len, 0); 
    recv (s, rbuf, sizeof(rbuf), 0); 
    printf(rbuf); 
} 

的插座設置正確的摘要,但它不是將數據發送到客戶端打印,沒有人知道是怎麼回事了?

+0

你應該檢查'send'和'recv'的返回碼。此外,這些功能不能確保發送或接收整個緩衝區,因此您必須使用循環來發送和接收數據。此外,您總是將數據追加到'output',並且永遠不會在循環中重置此變量的值,即發送後。 – harpun

回答

1

readContent正在從哪裏讀取數據?因爲這一行看起來很可疑

for(int j = 0; j < readContent().size(); j++) 

當然這應該是

for(int j = 0; j < getList.size(); j++) 

,因爲否則你將要調用readContent多次。