加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

创建基本的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.
>绑定后的服务器应该进入监听模式(检查手册页面的listen)
而客户端应在套接字创建后连接.
>然后在服务器端接受后听.
>最终读取和写入传输数据

附图将给您一个清晰的TCP连接画面

您可以查看手册页,了解所有功能的详细信息,或参考beej的插座编程指南(使用this链接)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读