以上是TCP通信客户端与服务器实现通信的基本原理流程图。

1、客户端的实现(4个步骤)

1.1创建socket对象

1.2请求连接

1.3发送数据

1.4关闭套接字

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

int main(int argc,char *argv[])
{
    //入参判断
    if(argc < 2)
    {
        printf("参数有误");
        return -1;
    }
    //1.创建socket对象(流式套接字)
    //2.设置服务器端的ip地址和接口
    //3.请求连接
    //4.发送数据
    //5.关闭socket对象
    
    //1.创建socket对象(流式套接字)
    int tcp_socket = socket(AF_INET,SOCK_STREAM,0);
    if(tcp_socket < 0)
    {
        perror("socket error");
        return -1;
    }

//1.1设置服务器端的ip地址和端口号
    //定义结构体并为其赋值
    struct sockaddr_in server;
    server.sin_family = AF_INET;//IPV4协议
    server.sin_port = htons(atoi(argv[2]));//端口号
    server.sin_addr.s_addr = inet_addr(argv[1]);//网络字节序

//2.请求连接
    if(connect(tcp_socket,(struct sockaddr *)&server,sizeof(server)) < 0)
    {
        perror("connect error");
        return -1;
    }

//3.发送消息
    char buf[20] = {0};
    printf("tftp>");
    fgets(buf,sizeof(buf),stdin);//从键盘写入数据到缓冲区
    send(tcp_socket,buf,strlen(buf),0);//将缓冲区的数据写入socket
    //4关闭socket对象
    close(tcp_socket);
    return 0;
}

提示:ip地址和端口号均采用主函数传参的方式输入。加入步骤3的目的是为了用发送消息的方式检验是否能正常通信。具体的每个函数中所用到的参数就不做详细的介绍了可利用(man 函数名)的方式查询。

2. 服务器的实现(6个步骤)

2.1创建socket对象

2.2绑定套接字

2.3启动监听

2.4接收连接请求

2.5接收客户端数据

2.6关闭socket对象

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

int main(int argc,char *argv[])
{
    //入参判断
    if(argc < 3)
    {
        printf("参数有误");
        return -1;
    }
    //1.创建socket对象(流式套接字)    socket()
    //2.设置服务器端的ip地址和端口号  struct sockaddr_in
    //3.绑定自己的ip地址和端口号      bind()
    //4.监听socket对象                listen()
    //5.接受连接                      accept()
    //6.接受连接后进行操作
    //7.关闭socket对象                close()
    
    //1.创建socket对象(流式套接字)
    int socket_fd = socket(AF_INET,SOCK_STREAM,0);
    if(socket_fd < 0)
    {
        perror("socket error");
        return -1;
    }

//1.1设置服务器端的ip地址和端口号
    //定义结构体并为其赋值
    struct sockaddr_in server;
    server.sin_family = AF_INET;//IPV4协议
    server.sin_port = htons(atoi(argv[2]));//端口号
    server.sin_addr.s_addr = inet_addr(argv[1]);//网络字节序

//2.绑定自己的ip地址和端口号
    if(bind(socket_fd,(struct sockaddr *)&server,sizeof(server)) < 0)
    {
        perror("bind error");
        return -1;
    }

//3.监听socket对象
    int ret = listen(socket_fd,5);
    if(ret < 0)
    {
        perror("listen error");
        return -1;
    }

//4.接收连接
    int newfd =  0;//接收新的socket对象
    struct sockaddr_in client;
    int len = sizeof(client);
    newfd = accept(socket_fd,(struct sockaddr *)&client,&len);//通过参数2 获得客户端信息
    if(newfd < 0)
    {
        perror("accept error");
        return -1;
    }
    //输出客户端信息
    printf("cilent ip=%s port=%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));

//5.接收数据
    char buf[20] = {0};
    recv(newfd,buf,sizeof(buf),0);
    printf("%s\ny",buf);
    //6.关闭socket对象
    close(newfd);

提示:在连接成功后会产生一个新的socket对象newfd,在之后的操作中用的是newfd而不是最开始创建的socket_fd。

C语言实现TCP服务器与客户端通信相关推荐

  1. 【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)

    功能描述 利用TCP网络通信实现客户端和服务器的通信 服务器代码 server.c #include<stdio.h> #include<sys/socket.h> #incl ...

  2. QT网络编程——TCP服务器和客户端通信

    目录 一.服务器端 1.QT中TCP服务器的开发思路 2.QT服务器界面设计 3.QT服务器代码实现 二.客户端 1.QT中TCP客户端的开发思路 2.QT客户端界面设计 3.QT客户端代码实现 网络 ...

  3. nodejs TCP服务器和客户端通信的socket结构

    这个结构我们大学时上Unix网络编程的专业课就学过了: nodejs服务器端调用net模块的createServer方法启动一个TCP服务器,这个方法要指定一个回调函数,每当新的客户端发起连接后,回调 ...

  4. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

  5. python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信python实例

    python 实现TCP socket通信和 HTTP服务器.服务器和客户端通信实例 socket是什么? 服务器和客户端通信的流程 python 实现TCP socket通信例子 关于Host和PO ...

  6. Qt 零基础设计实现TCP服务器和客户端上位机(零基础实战详解,附源码文件)

    文章目录 TCP和UDP TCP的三次握手和四次分手 TCP和UDP的区别 关于Socket(套接字) Qt TCP服务器的设计与实现 使用Qt的 帮助 TCP服务器和客户端 区别 UI界面设计和原则 ...

  7. python应用系列教程——python使用socket创建tcp服务器和客户端

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输 ...

  8. TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)

    TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子) 每个文件或套接口都有一个访问计数,该访问计数在文件表项中维护,它表示当前指向该文件或套接口的打开的描述字个数. 每个文件, ...

  9. 服务器主动发送fin信号,tcp 服务器向客户端发送FIN

    tcp 服务器向客户端发送FIN 内容精选 换一换 ELB的常见异常返回码有400.403.502.504等.若遇到这些返回码建议您先直接访问后端云服务器,查看是否是后端云服务器的异常.若后端云服务器 ...

最新文章

  1. 浅说——九讲背包之01背包
  2. CCNA和四级网工的对比
  3. 乱想-HTTP请求常用对象
  4. java instanceof 动态_Java关键字instanceof用法及实现策略
  5. 前端笔记-对webpack和vue的基本认识
  6. linux下搭建博客Day8
  7. 股市像脱缰的“野牛”,谁是最好的“牛崽”?
  8. 集线器、交换机和路由器之间的区别
  9. 库ppt演示 python_用Python实现PPT转化图片
  10. C# 客户端手动配置数据证书 WCF Certificate
  11. 学习NA,Dynamips实验环境(工大瑞普)下载地址
  12. vue+three.js导入obj模型不显示问题
  13. Robotium-基础理论介绍
  14. python做erp系统的可行性_ERP可行性分析
  15. Alpha 事后诸葛亮(团队)
  16. 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
  17. java.lang.IllegalStateException: Shutdown in progress
  18. led显示屏p10参数设置_如何看P10显示屏参数
  19. 马氏快速记星座法——5分钟快速记忆星座和月份!超快!超准!超实用!
  20. 第十三章 使用动态SQL(二)

热门文章

  1. 柏西机器人_哪些动画和漫画中精彩的打斗片段让你念念不忘?
  2. (4/4) Biweekly Contest 42
  3. Java 集合的有序和无序总结
  4. ping 广播ip地址发发生的一些事情
  5. 买卖汽车电商交易平台、选车社区论坛、买新车、二手车交易平台、移动端汽车电商平台、web端汽车运营管理平台、供应商管理、营销商管理、新车交易管理、调车管理、汽车顾问、车库管理、出入库管理、Axure原型
  6. linux ntp时间源服务器,NTP时间服务器
  7. 使用delphi+intraweb进行微信开发4—微信消息加解密
  8. JavaWeb:request.getSession().invalidate()与request.getSession().removeAttribute()的区别
  9. session的removeAttribute()和invalidate()的区别 1
  10. php返回302,php使用curl请求返回302(30x)