针对ECHO服务的TCP客户软件的实现( Linux + Socket + C + Code + Annotation)

俗话虽说宇宙机人要善于复制,但博主还是希望各位能理解其中的原理,最好亲手实现一遍,毕竟三维空间中自己经历过的是记忆中最深刻的,且远比二维空间中的文字阅读要深刻。
鉴于博主的阅历有限,文章有失误或者疑惑的地方还望多多指出,开了提醒的我会第一时间交流回复,和各位同伴一起进步呀(ง •_•)ง


TCP客户端算法

  1. 找到期望与之通信的服务器IP地址协议端口号
  2. 分配套接字
  3. 致命此连接需要在本地机器中的、任意的、未使用的协议端口,并允许TCP选择一个这样的端口
  4. 将这个套接字连接到服务器
  5. 使用应用级协议与服务器通信
  6. 关闭连接

实验原理:TCP客户端交互模式

TCP交互图


步骤一:引入头文件

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <stdarg.h>

步骤二:Echo客户端所需函数声明以及宏定义

/*访问Echo服务到特定端口号并输出回应*/
int TCPecho(const char *host, const char *service);  
/*TCP链接*/
int connectTCP(const char *host, const char *service);
/*连接函数*/
int connectsock(const char* host, const char* service, const char* transport);
/*报错并退出*/
int errexit(const char* format, ...);

#define LINELEN 128
#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif

步骤三:主函数的实现,定义本机IP和服务名,并调用TCPecho函数实现通过TCP访问Echo服务

int main(int argc, char *argv[]){
   
    char *host = "localhost";
    char *service = "echo";
    switch (argc)
    {
   
        case 1:
                host = "localhost";
                break;
        case 3:
                service = argv[2];
        case 2:
                host = argv[1];
                break;
        default:
                fprintf(stderr, "usage: TCPecho [host [prot]]\n");
                exit(1);
    }
    TCPecho(host, service);
    exit(0);
}

步骤四:TCPecho函数的实现。连接TCP后循环读取每行输入,并将该输入传输至Echo服务器,再循环读取Echo服务器返回的数据。

int TCPecho(const char* host, const char* service)
{
   
    char buf[LINELEN + 1];  //一行的字符个数
    int s, n;  //套接字描述符、读计数符
    int outchars, inchars;  //发送数据、接收数据

    s = connectTCP(host, service); 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值