首页 > 编程语言 >TCP网络编程实例

TCP网络编程实例

时间:2024-04-01 09:32:08浏览次数:25  
标签:serv int 编程 TCP 实例 fd include 连接 客户端

服务器端代码:

#include<t_stdio.h>
#include<sys/types.h>          
#include <sys/socket.h>
#include<arpa/inet.h>
#include <sys/socket.h>
#include<ctype.h>
#include<unistd.h>
int main(void){
    struct sockaddr_in serv,cli;
    socklen_t cli_len;
    char buf[128];
    char IP[32];
    //创建一个通讯端点,返回该端点的文件描述符
    //创建一个ipv4的tcp连接端口
    int s_fd=socket( AF_INET ,SOCK_STREAM ,0);

    //需要对server变量成员初始化
    serv.sin_family=AF_INET;
    serv.sin_port=htons(5556);
    serv.sin_addr.s_addr=htonl(INADDR_ANY);
    //将s_fd和本地地址,端口号绑定
    int b=bind(s_fd,(struct sockaddr *)&serv,sizeof(serv));

    if(b==-1)E_MSG("bind",-1);
    if(s_fd==-1)E_MSG("socket",-1);
    //将s_fd设置为被动连接,监听客户端连接的到来 
    //将客户端到来的连接放入未决连接队列中
    //指定未决连接队列的长度
    listen(s_fd,5);
    while(1){
        //从s_fd设备的未连接队列中提取一个进程进行处理
        //返回一个连接描述符,使用这个连接描述符与客户端进行通讯
        int c_fd=accept(s_fd,(struct sockaddr *)&cli,&cli_len);
        if(c_fd==-1)E_MSG("accept",-1);
        //binary--->text
        inet_ntop(AF_INET,&cli.sin_addr,IP,32); 
        printf("client ip: %s\n",IP);
        //代码执行到这里,三次握手以及完成,可以进行数据传输了
        //从c_fd中读取客户端发送过来的请求信息
        int r = read(c_fd,buf,128);
        //处理客户端的请求信息
        int i;
         for(i=0;i<r;i++){
            buf[i]=toupper(buf[i]);
         }
         //将处理结果回送客户端
         write(c_fd,buf,r);
        //关闭本次连接
        close(c_fd);
    }

    return 0;
}

客户端代码:

#include<t_stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include<string.h>
#include<unistd.h>
int main(int argc,char * argv[]){
     struct sockaddr_in serv;
     char * msg="this is a test..\n";
     char buf[128];
    //创建socket设备,返回该设备的文件描述符
    int fd=socket(AF_INET,SOCK_STREAM,0);
    if(fd==-1)E_MSG("socket",-1);
    //服务器信息初始化
    serv.sin_family=AF_INET;
    serv.sin_port=htons(5556);
    //127.0.0.1 text-->binary
    inet_pton(AF_INET,argv[1],&serv.sin_addr);
    // 向服务器发起连接
    int c=connect(fd,(struct sockaddr *)&serv,sizeof(serv));
    if(c==-1)E_MSG("connect",-1);
    //三次握手成功,向服务器发送请求信息
    write(fd,msg,strlen(msg)+1);
    //阻塞等待服务器回应
    int r=read(fd,buf,128);
    //将相应信息输出到显示器
    write(1,buf,r);
    //关闭连接
    close(fd);
    return 0;
}

解析:

  1. 在服务器端,首先创建了一个socket设备,用于建立网络连接。
  2. 使用bind函数,将socket设备与特定的网络地址和端口号绑定。在这里,地址被设为INADDR_ANY,表示该服务器可接受任意网络中的请求,端口号被设为5556
  3. 调用listen函数,使得该socket设备成为一个被动连接的设备,等待客户端的连接请求。该函数的第二个参数5,表示最多可以维护5个客户端的连接请求。
  4. 在一个无限循环中,使用accept函数,从设备的未接连接队列中取出一个连接进行处理。返回的c_fd是用来和客户端进行通信的连接描述符。
  5. 在接收到客户端连接之后,获取客户端的IP地址,打印到控制台。
  6. 使用read函数,读取c_fd中客户端发送过来的请求信息。
  7. 然后对客户端发送来的字符,从小写转换为大写。
  8. 使用write函数,将被转换为大写的字符回送给客户端。
  9. 传输完毕后,使用close函数关闭本次连接。
  10. 客户端也首先创建一个socket设备。
  11. 初始化服务器端的信息,包括网络协议、端口和服务器IP地址。
  12. 调用connect函数向服务器发起连接。
  13. 发起连接后,使用write 函数向服务器发送请求信息,这里请求的信息为 "this is a test.."
  14. 使用read函数等待服务器的回应。
  15. 最后将收到的回应信息输出到显示器,并关闭连接。

标签:serv,int,编程,TCP,实例,fd,include,连接,客户端
From: https://blog.csdn.net/weixin_73951752/article/details/137202200

相关文章

  • Unity 3D脚本编程与游戏开发(3.5)
    6.2.8总结和拓展        本节利⽤Unity官⽅素材,以有限的篇幅解释了动画状态机的原理,以及动画制作中最基本但最重要的步骤。总的来看,⽬前的动画只做了4种状态——站⽴、⾛、跑和跳跃,还缺少下蹲、下蹲移动和落地缓冲等动作。好在这些动作只是对现有动作的平⾏扩展,想要......
  • 突破编程_C++_C++14新特性(变量模板)
    1变量模板在C++14中的引入与扩展在C++14中,变量模板的引入与扩展为编程带来了许多便利,特别是在泛型编程方面。这一特性允许我们直接定义模板变量,而不需要将其包装在模板类或模板函数中,从而使得代码更加直观和简洁。首先,我们来详细了解一下C++14之前模板的使用限制。......
  • 突破编程_C++_网络编程(OSI 七层模型(传输层))
    1传输层的功能与特点1.1传输层的功能传输层是OSI七层模型中的第四层,它位于网络层和应用层之间,起着承上启下的关键作用。以下是关于OSI传输层功能的详细讲解:一、提供可靠的数据传输服务传输层的主要任务是确保数据在源主机和目标主机之间可靠地传输。它通过一系列......
  • 理解 Python 编程中 *args 与 **kwargs 的妙用
    文章目录一、形式参数与实际参数二、*args与**kwargs三、总结......
  • 06 面向对象编程 (续)
    Static关键字静态代码块:只执行一次。Person.javapackagecom.mysoft.oop.demo08;publicclassPerson{//2:赋初值{System.out.println("匿名代码块");}//1:只执行一次static{System.out.println("静态代码块");}//......
  • 八股文——TCP四大机制!小白也能懂!(重传机制、滑动窗口、流量控制、拥塞控制)
    引言TCP巨复杂!同时在八股计算机网络中也经常被问到,必须会!这篇文章将让小白有个大体框架,知道怎么个事,面试中可以有话说,也能让佬更加巩固知识点。TCP是一个可靠的传输协议,为了保证它的可靠性,出现七七八八的机制,它可能有数据的破坏、丢包、重复以及分片顺序混乱等问题,TCP通过序......
  • Springboot 实现Aop切面编程
    1.引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2.写切面方法现在有个方法,publicList<User>getList(){List<User>users=......
  • 继ChatGPT后Sora的出现,中国编程教育的脚步再次落后?
    继ChatGPT成为全世界的焦点后,OpenAI再次发布震惊科技圈的技术——Sora。Sora是什么,相信很多小伙伴们已经多多少少有过了解,为了让大家对Sora了解得更充分,我再给大家介绍一下。Sora可以根据用户提供的文本描述,生成高质量、逼真、连贯的视频,最长可达一分钟。Sora的名称源于日......
  • 什么时候使用静态方法,面向对象编程,设计模式,php编程
    静态方法在编程中有多种适用情况,以下是一些常见的使用场景:1.**工具类或辅助函数**:当你需要创建一个类来提供一些与类本身的实例无关的工具方法或辅助函数时,静态方法是很合适的。这些方法可以直接通过类名来调用,而无需创建类的实例。2.**计算或常量**:如果有一些计算或常量与......
  • 提高工作效率的工具【AI辅助编程工具】
    可能最强的辅助编程工具还是OpenAI开发的Copilot工具,但是要花钱。这里主要推荐两个目前还能免费用的VSCode插件:CodeGeeX和FittenCode,基本都支持智能问答,代码生成,代码加注释,生成单元测试,查找代码错误等。VSCode安装插件的步骤类似,插件使用方法也介绍的很清楚,这里以CodeGeeX介......