基于C语言实现的TCP客户端

news/2024/10/30 21:21:30/

目录

一、TCP客户端的工作流程

二、C语言实现TCP客户端的代码示例

1. 头文件和宏定义

2. 主函数:连接服务器并进行通信

代码详解

三、编译与运行

1. 编译代码

2. 运行客户端

3. 示例输出


        在网络编程中,TCP(传输控制协议)是一种可靠、面向连接的协议,广泛用于客户端-服务器模式的通信。本文将通过一个简单的C语言实现示例,演示如何构建一个TCP客户端,连接到服务器并进行数据传输。

一、TCP客户端的工作流程

TCP客户端的基本工作流程可以分为以下几步:

  1. 创建套接字(socket)。
  2. 通过IP地址和端口号连接到服务器。
  3. 发送和接收数据。
  4. 关闭连接。

在这个过程中,socketconnectsendrecvclose 等函数是实现客户端功能的核心。

二、C语言实现TCP客户端的代码示例

1. 头文件和宏定义

首先,我们需要引入所需的头文件和定义必要的宏,包括服务器的IP地址和端口号。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define SERVER_IP "127.0.0.1"  // 服务器IP地址
#define SERVER_PORT 8080       // 服务器端口号
#define BUFFER_SIZE 1024       // 缓冲区大小

2. 主函数:连接服务器并进行通信

以下代码展示了TCP客户端的核心实现过程,包括创建套接字、连接服务器、发送和接收消息等。

int main() {// 1. 创建套接字int sock = socket(AF_INET, SOCK_STREAM, 0);if (sock < 0) {perror("Socket creation failed");exit(EXIT_FAILURE);}// 2. 定义服务器地址struct sockaddr_in server_addr;memset(&server_addr, 0, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(SERVER_PORT);// 将IP地址从字符串转换为网络字节序if (inet_pton(AF_INET, SERVER_IP, &server_addr.sin_addr) <= 0) {perror("Invalid address/Address not supported");close(sock);exit(EXIT_FAILURE);}// 3. 连接服务器if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {perror("Connection failed");close(sock);exit(EXIT_FAILURE);}printf("Connected to the server\n");// 4. 发送和接收数据char buffer[BUFFER_SIZE] = {0};const char *message = "Hello, Server!";// 发送消息到服务器send(sock, message, strlen(message), 0);printf("Message sent: %s\n", message);// 接收服务器响应int bytes_received = recv(sock, buffer, BUFFER_SIZE, 0);if (bytes_received > 0) {buffer[bytes_received] = '\0';  // 确保字符串以 '\0' 结尾printf("Message received: %s\n", buffer);} else {printf("No response from server\n");}// 5. 关闭套接字close(sock);printf("Disconnected from the server\n");return 0;
}

代码详解

  • socket():创建一个套接字,用于网络通信。AF_INET 指定IPv4协议,SOCK_STREAM表示使用TCP。
  • inet_pton():将IP地址从点分十进制字符串转换为网络字节序。
  • connect():连接到服务器,若成功连接则返回0。
  • send()recv():用于发送和接收数据。
  • close():断开与服务器的连接。

三、编译与运行

1. 编译代码

可以使用 gcc 编译代码,命令如下:

gcc tcp_client.c -o tcp_client

2. 运行客户端

确保服务器已启动,然后运行客户端程序:

./tcp_client

如果服务器在本地运行,并且监听端口8080,客户端应当可以成功连接到服务器,并发送一条消息。

3. 示例输出

假设服务器端发送回来的响应消息为 "Hello from Server!",则运行结果可能如下:

Connected to the server
Message sent: Hello, Server!
Message received: Hello from Server!
Disconnected from the server

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        通过以上示例,我们了解了TCP客户端的基本实现方式和运行流程。本文展示了在C语言中如何使用套接字进行网络通信,对于希望理解和实现网络编程的开发者来说,这是一个良好的入门示例。


http://www.ppmy.cn/news/1543189.html

相关文章

一道关于Linux hash 解密的CTF杂项题

一道关于Linux hash 解密的CTF杂项题 题目描述: 猜猜我是用什么方法重置了对方的密码?我登入对方系统使用的密码是MyPa???????? flag为密码的md5值。黑客 192.168.80.134 服务器 192.168.80.136题目文件 $ ls -al file.pcap .r--r--r-- staff staff 54 KB Wed O…

w006基于SpringBoot的网上订餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

官宣下代GPU存在缺陷,50系显卡或将迎来涨价

如果说 AMD 在 Ryzen 3000 系列还是和 intel 在 CPU 方面棋差一着的话&#xff0c;Ryzen 5000 系列就是打了个漂亮的翻身仗了。 凭借先进的 7nm 工艺制程和全新架构&#xff0c;让后来 intel 急忙推出「14nm」的 11 代酷睿也难以望其项背。 直到 intel 12 代发布的时候&#xf…

HTML入门教程19:HTML ID

一、ID的基本用法 定义ID&#xff1a; 在HTML元素中&#xff0c;通过在元素的开始标签内添加id属性来定义ID。ID属性的值在整个HTML文档中必须是唯一的&#xff0c;不能重复。例如&#xff1a;<p id"uniqueparagraph">这是一个带有唯一标识符的段落。</p>…

访问jenkins页面报错

安装fontconfig 即可 yum install fontconfig -y 安装完之后重启jenkins systemctl restart jenkins 再访问

SAP-ABAP开发-FUNCTION ALV 补充

一、增加表头 1、基本表头 先创建子程序&#xff0c;对表头内表进行赋值&#xff08;表头内表SLIS T LISTHEADER&#xff09;使用函数创建表头 &#xff08;REUSE_ALV_COMMENTARY_WRITE&#xff09;修改ALV调用函数向I_CALLBACK_TOP_OF_PAGE进行传值&#xff0c;传子程序名称或…

爬虫利器playwright

是什么 它是微软在 2020 年初开源的新一代自动化测试工具&#xff0c;其功能和 selenium 类似&#xff0c;都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器&#xff0c;打开百度&#xff0c;输入漂亮小姐姐并查找&#x…

融合ASPICE与敏捷开发:探索汽车软件开发的最佳实践

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽车软件过程改进和能力dEtermination&#xff09;与敏捷开发在软件开发领域各自具有独特的价值和特点&#xff0c;它们之间的关系可以归纳为既相互区别又相互补充。 一、ASPICE的特点 ASPICE是汽车行业对软件开发流程的一个评…