2016-01-08 98 views
0

即時通訊嘗試在我的程序中使用send和recv命令,這是一個客戶端服務器消息傳遞軟件。send和recv C++

但是,似乎代碼運行時我不能傳遞消息,因爲發送CMD不傳遞數據。命令執行後,我試圖通過的數據(緩衝區)是空的,我通過打印(緩衝區)檢查。爲什麼會這樣......如果有人能幫助我,我將不勝感激。

服務器端代碼:

#include<iostream> 
#include<string.h> 
#include<sys/types.h> 
#include<sys/socket.h> 
#include<netinet/in.h> 
#include<arpa/inet.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<netinet/ip.h> 
using namespace std; 

int main() 
{ 
    int client, server, i; 
    int portNum = 1500; 
    bool isExit = false; 
    int bufsize = 1024; 
    char buffer[bufsize]; 

struct sockaddr_in server_addr; 
    socklen_t size; 

// init socket 

    client = socket(AF_INET, SOCK_STREAM, 0); 

    if (client < 0) 
    { 
    cout << "Error establishing connection" << endl; 
    exit(1); 
    } 

    cout << "Server Socket connection created..." << endl; 

    server_addr.sin_family = AF_INET; 
    // server_addr.sin_addr.s_addr = htons(INADDR_ANY); 
    server_addr.sin_port = htons(portNum); 
    server_addr.sin_addr.s_addr = inet_addr("192.168.0.5"); 
// Binding socket 

    if (bind(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) 
    { 
    cout << "Error binding socket...." << endl; 
    exit(1); 
    } 

size = sizeof(server_addr); 
cout << "Looking for clients..." << endl; 

// Listening socket 

    listen(client, 1); 

// Accept client 

    server = accept(client, (struct sockaddr*)&server_addr, &size); 
if (server < 0) 
{ 
cout << "Error on accepting.." << endl; 
exit(1); 
} 
cout << "Connected with client..." << endl; 
cout << "Enter your message:\n" << endl; 
    cin >> buffer; 
    cout << buffer; 
    send(server, buffer, bufsize, 0); 
cout << "message sent...\n", buffer; 
return 0; 
} 

客戶端代碼

#include<iostream> 
#include<string.h> 
#include<sys/types.h> 
#include<sys/socket.h> 
#include<netinet/in.h> 
#include<arpa/inet.h> 
#include<stdlib.h> 
#include<unistd.h> 
#include<netdb.h> 

using namespace std; 

int main() 
{ 

int client, server, i; 
    int portNum = 1500; 
    bool isExit = false; 
    int bufsize = 1024; 
    char buffer[bufsize]; 
    struct sockaddr_in server_addr; 

// Init socket 


    client = socket(AF_INET, SOCK_STREAM, 0); 

    if (client < 0) 
    { 
    cout << "Error creating socket" << endl; 
    exit(1); 
    } 

cout << "Client socket created" << endl; 

server_addr.sin_family = AF_INET; 
server_addr.sin_port = htons(portNum); 
server_addr.sin_addr.s_addr = inet_addr("192.168.0.5"); 
// Connecting socket server 

if (connect(client, (struct sockaddr*)&server_addr, sizeof(server_addr)) == 0) 

{ 
    cout << "Connecting to server..." << endl; 
    recv(client, buffer, bufsize, 0); 

    buffer[bufsize] = '\0'; 

    cout << "client: received", buffer; 

close(client); 
} 
return 0; 
} 
+0

除了公認的答案,也有在你的代碼另一個錯誤。你的代碼假設'send'()將始終發送第四個參數中給出的字節數。這是一個常見的編程錯誤,因爲這是不正確的。 send()可能發送的字節數少於請求的字節數。您必須檢查send()的返回值,並決定相應的操作。請參閱send(2)手冊頁以獲取更多信息。 –

回答

1

你不是實際打印buffer

cout << "client: received", buffer; 

應該是:

cout << "client: received " << buffer; 

你可能還需要一個endl

cout << "client: received " << buffer << endl; 
+0

感謝您的幫助,它現在可行! – zeshan

+0

除非你必須刷新緩衝區,否則不要使用'endl'。 「\ n」適用於大多數場景。 – SergeyA

相關問題