创建基本的C/C++ TCP套接字编写器
发布时间:2020-12-16 06:03:56 所属栏目:百科 来源:网络整理
导读:以下是我提出的以下基本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 "
以下是我提出的以下基本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的方式运行? 解决方法
以下是通过TCP传输数据所需的更改
>同时创建套接字传递正确的参数.在上面的例子中,你传递SOCK_DGRAM而不是传递SOCK_STREAM. 附图将给您一个清晰的TCP连接画面 您可以查看手册页,了解所有功能的详细信息,或参考beej的插座编程指南(使用this链接) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |