以下是我提出的以下基本socket代码:
//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的方式运行?