下面是我想出了以下基本套接字代碼:創建一個基本的C/C++ TCP套接字作家
//General includes:
#include <iostream>
#include <stdio.h>
#include <string>
//Network related includes:
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
//Target host details:
#define PORT 1234
#define HOST "74.74.74.74"
using namespace std;
//Function prototypes:
string MessageFormat(int, char**);
void MessageSend(string);
int main(int argc, char *argv[])
{
//Parse arguments and format message:
string message = MessageFormat(argc, argv);
//Send the message out:
MessageSend(message);
return 0;
}
string MessageFormat(int argc, char *argv[])
{
//Massage the command line parameters
// into my desired payload format.
return message;
}
void MessageSend(string message)
{
int sd, ret;
struct sockaddr_in server;
struct in_addr ipv4addr;
struct hostent *hp;
sd = socket(AF_INET,SOCK_DGRAM,0);
server.sin_family = AF_INET;
inet_pton(AF_INET, HOST, &ipv4addr);
hp = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET);
//hp = gethostbyname(HOST);
bcopy(hp->h_addr, &(server.sin_addr.s_addr), hp->h_length);
server.sin_port = htons(PORT);
connect(sd, (const sockaddr *)&server, sizeof(server));
send(sd, (char *)message.c_str(), strlen((char *)message.c_str()), 0);
}
這是很基本的,是實際可行的。但是,它發送的是UDP數據包而不是TCP數據包,所以期望TCP的目標主機會拒絕這些數據包。另外,通過檢查連接/發送值以及使用ngrep觀看我的接口,我可以100%驗證數據包是否正在發送,所以這不是問題。
我只是想修改我擁有的東西,而不是用boost asio創建一個全功能的服務器。我怎樣才能調整它,使它在TCP而不是UDP方面運行?
將'SOCK_DGRAM'改爲'SOCK_STREAM '。 (線索:UDP =用戶**數據報**協議)。 – BoBTFish 2013-05-10 16:08:00
當然。謝謝。 – kmarks2 2013-05-10 16:12:24