
//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.
>绑定后的服务器应该进入监听模式(检查手册页面的Listen)
而客户端应在套接字创建后连接.
>然后在服务器端接受后听.
>最终读取和写入传输数据
附图将给您一个清晰的TCP连接画面
您可以查看手册页,了解所有功能的详细信息,或参考beej的插座编程指南(使用this链接)
总结以上是内存溢出为你收集整理的创建基本的C/C++ TCP套接字编写器全部内容,希望文章能够帮你解决创建基本的C/C++ TCP套接字编写器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)