首页 > 编程语言 >TCP编程:从入门到实践

TCP编程:从入门到实践

时间:2024-09-26 23:48:05浏览次数:9  
标签:addr socket 编程 TCP client fd 入门

本文将带领大家了解TCP编程的基本概念、原理及其在实战中的应用。通过学习本文,读者可以掌握TCP编程的核心技术,并在实际项目中熟练运用。

一、引言

TCP(传输控制协议)是一种面向连接、可靠、基于字节流的传输层通信协议。在互联网、局域网等网络环境中,TCP编程具有广泛的应用。掌握TCP编程技巧,对于开发者来说具有重要意义。本文将从TCP编程的基本概念入手,逐步深入,带领大家掌握TCP编程的核心技术。

二、TCP编程基本概念

1. 端口号

端口号是TCP协议中的一个重要概念,用于标识不同的应用进程。端口号范围从0到65535,其中0到1023为系统保留端口,1024到49151为用户注册端口,49152到65535为动态端口。

2. socket

socket(套接字)是TCP编程中的基本操作单元,用于实现进程间的通信。在TCP编程中,socket分为服务器端socket和客户端socket。

3. 三次握手

TCP协议建立连接的过程称为三次握手。具体过程如下:

(1)客户端发送一个SYN报文到服务器,进入SYN_SENT状态。

(2)服务器收到SYN报文,回复一个SYN+ACK报文,进入SYN_RCVD状态。

(3)客户端收到服务器的SYN+ACK报文,回复一个ACK报文,双方进入ESTABLISHED状态。

三、TCP编程实战

下面我们将通过一个简单的例子,讲解如何在C语言中实现TCP编程。

1. 创建socket
#include <sys/socket.h>

int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd < 0) {
    perror("Create socket failed");
    return -1;
}
 

2. 绑定地址和端口
#include <netinet/in.h>

struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(8888);

if (bind(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
    perror("Bind failed");
    return -1;
}
 

3. 监听客户端连接
if (listen(socket_fd, 10) < 0) {
    perror("Listen failed");
    return -1;
}
 

4. 接受客户端连接
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int client_fd = accept(socket_fd, (struct sockaddr *)&client_addr, &client_addr_len);
if (client_fd < 0) {
    perror("Accept failed");
    return -1;
}
 

5. 数据传输
char buffer[1024];
while (1) {
    int len = read(client_fd, buffer, sizeof(buffer));
    if (len <= 0) {
        break;
    }
    write(client_fd, buffer, len);
}
 

6. 关闭socket
close(socket_fd);
close(client_fd);
 

四、总结

本文从TCP编程的基本概念入手,通过一个简单的实例,讲解了如何在C语言中实现TCP编程。掌握TCP编程技巧,对于开发者来说具有重要意义。希望本文能帮助大家更好地理解和应用TCP编程。在实际项目中,大家还需不断积累经验,提高自己的编程水平。

标签:addr,socket,编程,TCP,client,fd,入门
From: https://blog.csdn.net/2201_75782847/article/details/142580633

相关文章

  • kettle从入门到精通 第八十八课 ETL之kettle kettle连接sqlserver彻底搞明白
    场景:时不时群里面会有小伙伴咨询使用kettle连接mssqlserver数据库,折腾很久浪费时间,今天刚好有时间把这一块梳理下,希望能让大家节省时间提高效率。 1、首先要知道连接sqlserver有两种方式,JTDSjdbc驱动和微软的原装驱动,如下图所示: 兼容性:jTDS:jTDS兼容旧版本的SQLSer......
  • Selenium入门
    Selenium是一个用于自动化web应用程序测试的工具,它支持多种浏览器和编程语言。下载驱动程序:根据你的浏览器类型和版本,下载相应的WebDriver。例如,Chrome浏览器需要ChromeDriver。安装Selenium库pipinstallselenium导入fromseleniumimportwebdriver创建浏览器......
  • 零基础入门大语言模型
    阶段1:数学基础学习大语言模型的核心在于对以下数学概念的掌握:线性代数(矩阵、向量、矩阵乘法、特征值与特征向量)微积分(导数、偏导数、链式法则)概率与统计(条件概率、贝叶斯定理、期望值、方差)优化(梯度下降、凸优化)推荐学习资源:“MathematicsforMachineLearning”专......
  • 学编程难吗?多久能入门?
    当然,让我们继续补充并深化这篇文章的内容,探讨学习编程过程中的一些关键要素和心态调整。学习编程的心态调整学习编程不仅仅是掌握一门技术,更是一场心态的修行。在这个过程中,你可能会遇到各种挑战和挫折,比如代码bug难以解决、项目进展缓慢、新知识层出不穷等。面对这些困难,保......
  • ncurses编程资料
    资料NCURSESProgrammingHOWTO中文手册NCURSESProgrammingHOWTO英文手册NCURSES-Programming-HOWTO.pdfWritingProgramswithNCURSESGuidetoNcursesProgrammingcurses_tutorialconsole_codes......
  • 【编程人员的快乐】
    【聊聊编程人员的快乐,起初学习编程的快乐是什么?】https://www.bilibili.com/video/BV1rj41187Mf/?share_source=copy_web&vd_source=29585fff97e05f2b0fbc5acf7aeb03be<iframesrc="//player.bilibili.com/player.html?isOutside=true&aid=448929002&bvid=BV1rj41187Mf&ci......
  • 各种编程语言中有哪些共性?超详细+通俗易懂版!!!
    各种编程语言中存在着一些共性,这些共性构成了编程语言的基础框架和设计原则。以下是这些共性的主要方面:1.遵循基本的编程原则模块化:将程序划分为多个独立、可复用的模块,有助于降低程序的复杂度并提高可维护性。封装:隐藏对象的内部实现细节,只对外提供有限的接口,增强了程序的......
  • 哪个编程工具让你的工作效率翻倍?
    方向一:工具介绍VisualStudioCode(VSCode)VisualStudioCode是一款由微软开发的轻量级但功能强大的源代码编辑器,它支持几乎所有主流的开发语言和框架,如JavaScript、TypeScript、Python、C++、Java等。VSCode凭借其丰富的扩展生态、智能的代码补全、强大的调试功能......
  • 我如何赢得 JSM 编程挑战
    在浩瀚的编程挑战中,jsm编程挑战赛脱颖而出,成为开发人员展示技能和创造力的绝佳机会。上个月的主题“视频游戏”为一场激动人心的比赛奠定了基础,推动参与者探索游戏开发的新领域。在这篇博文中,我将分享我如何创建“宇宙探索者”的旅程,这款游戏最终带领我在星际编码冒险中取得胜利......
  • 开发人员人工智能入门:揭秘基础知识部分
    开发者们大家好!人工智能不再只是一个梦想。它就在这里并改变我们构建软件的方式。它可以使应用程序更好、更有用。但如何开始在项目中使用人工智能呢?本系列旨在为您提供踏上人工智能开发之旅的基础知识。在第一部分中,我们将深入研究核心概念并提供使用langchain和openai的实践......