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