iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >TCP实现服务器和客户端通信
  • 681
分享到

TCP实现服务器和客户端通信

tcp/ip服务器网络 2023-09-06 13:09:37 681人浏览 安东尼
摘要

目录 TCP介绍 代码实现 server(服务器端) 代码分析 client(客户端) 代码分析 结果展示 tcp介绍 TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传

目录

TCP介绍

代码实现

server(服务器端)

代码分析

client(客户端)

代码分析

结果展示


tcp介绍

TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传输数据。TCP 可以确保数据的可靠传输,即使在网络环境不稳定的情况下也能够保证数据的完整性和顺序。以下是 TCP 通信的一些特点:

  1. 面向连接:在 TCP 通信中,通信的双方必须先建立一个连接,然后才能进行数据的传输。连接的建立需要经过三次握手过程,确保双方都能够进行通信。
  2. 可靠传输:TCP 可以保证数据的可靠传输,它使用确认和重传机制来确保数据的完整性和顺序。每当发送方发送数据包时,接收方都会发送一个确认信息来表示已经收到数据。如果发送方没有收到确认信息,它会重新发送数据,直到接收方确认为止。
  3. 流量控制:TCP 可以根据接收方的处理能力来控制数据的发送速度,防止发送方发送过多的数据导致接收方无法处理。
  4. 拥塞控制:TCP 可以根据网络状况来调整发送方的数据发送速度,防止网络拥塞导致数据丢失和传输延迟。

总之,TCP 是一种可靠的协议,它在网络传输中发挥了重要的作用,特别是在需要确保数据完整性和顺序的场合,如 WEB 浏览器、电子邮件、文件传输等应用中。

代码实现

server(服务器端)

/server*****/#include #include  #include #include #include #include #include #include int main(int arGC, char const *argv[]){//1.使用Socket函数-创建流式套接字int sockfd = socket(AF_INET, SOCK_STREAM, 0); //创建IPv4的TCP套接字if (sockfd < 0){perror("scoket err");return -1;}//socket第一个参数已经是AF_INET ipv4,是用bind函数得填充ipv4结构体struct sockaddr_in saddr;saddr.sin_family = AF_INET; //设置地址族为IPv4saddr.sin_port = htons(atoi(argv[1])); //端口占了两个字节,将小端转换为大端saddr.sin_addr.s_addr = inet_addr("0.0.0.0"); //绑定任意可用的IP地址//2.绑定套接字,ip和端口if (bind(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0){    perror("bind");    return -1;}else{    printf("bind ok\n");}//3.监听-被动状态if (listen(sockfd, 5) < 0) //设置监听队列大小为5{    perror("listen err");    return -1;}//4.阻塞等待客户端链接int accept_fd = accept(sockfd, NULL, NULL); //接受客户端的连接请求if (accept_fd < 0){    perror("accept err");    return -1;}//5.循环接受消息char arr[128];ssize_t ret;while (1){    ret = recv(accept_fd, arr, sizeof(arr), 0); //从客户端接收数据    if (ret < 0)    {        perror("recv err");        return -1;    }    else if (ret == 0)    {        perror("clien exit");        break;    }    else    {        write(1, arr, ret); //将接收到的数据输出到终端    }}close(sockfd); //关闭套接字close(accept_fd);return 0;}

代码分析

具体分析如下:

第1行到第15行,定义了程序的主函数main(),并进行了如下操作:
使用socket函数创建一个IPv4的TCP套接字。
利用bind函数将套接字绑定到指定IP和端口上。
使用listen函数将套接字设置为监听状态,设置了监听队列的长度为5。
使用accept函数等待客户端连接请求,并返回连接套接字的文件描述符。
在一个while循环中循环接收客户端发送的消息,然后将接收到的消息输出到终端。
关闭套接字。
第17行到第22行,定义了一个IPv4的套接字地址结构体sockaddr_in,并设置IP地址和端口号。

第24行到第32行,利用bind函数将套接字绑定到指定IP和端口上,并检查绑定是否成功。

第35行到第41行,使用listen函数将套接字设置为监听状态,并设置监听队列的长度为5,如果监听失败则输出错误信息并退出程序。

第44行到第50行,使用accept函数阻塞等待客户端连接请求,如果接受失败则输出错误信息并退出程序,否则返回连接套接字的文件描述符。

第53行到第64行,在一个while循环中循环接收客户端发送的消息,如果接收失败则输出错误信息并退出程序,如果接收到的消息长度为0则说明客户端已经关闭连接,退出循环;否则将接收到的消息输出到终端。

第67行到第70行,关闭套接字并退出程序。

该程序实现了一个简单的TCP服务器,可以接收客户端的连接并循环接收客户端发送的消息,将接收到的消息输出到终端。

client(客户端)

/client**********/#include #include  #include #include #include #include #include #include #include int main(int argc, char const *argv[]){//1. 使用socket创建流式套接子int socket_fd;socket_fd = socket(AF_INET, SOCK_STREAM, 0);if (socket_fd < 0){perror("socket_fd err"); // 打印错误信息return -1;}//2. 请求链接struct sockaddr_in cnt;cnt.sin_family = AF_INET;cnt.sin_port = htons(atoi(argv[1])); // 将输入的字符串参数转换为整数端口号cnt.sin_addr.s_addr = inet_addr("0.0.0.0"); // 设置服务器的IP地址if (connect(socket_fd, (struct sockaddr *)&cnt, sizeof(cnt)) < 0){    perror("connect err"); // 打印错误信息    return -1;}char buf[128];int ch;while (1){    ch = read(0, buf, 128); // 从标准输入读取用户输入的数据    if (send(socket_fd, buf, ch, 0) < 0) // 发送数据到服务器    {        perror("send err"); // 打印错误信息        return -1;    }}close(socket_fd); // 关闭套接字return 0;}

代码分析

这是一个TCP客户端代码,它的主要功能是连接到指定的服务器并发送数据。下面是代码的逐行分析:

socket_fd = socket(AF_INET, SOCK_STREAM, 0);:创建一个流式套接字。

cnt.sin_family = AF_INET;:设置服务器地址的协议族为IPv4。

cnt.sin_port = htons(atoi(argv[1]));:将从命令行参数获取的字符串端口号转换成网络字节序的整数端口号,并将其存储在 sockaddr_in 结构体的 sin_port 字段中。

cnt.sin_addr.s_addr = inet_addr("0.0.0.0");:设置服务器IP地址为 0.0.0.0,表示客户端可以连接到任何一个可用的IP地址。

connect(socket_fd, (struct sockaddr *)&cnt, sizeof(cnt)):连接到服务器。这个函数将套接字连接到 sockaddr_in 结构体中描述的IP地址和端口号。如果连接失败,将返回一个负数值。

ch = read(0, buf, 128);:从标准输入读取最多128个字节的数据,并将其存储在 buf 中。

send(socket_fd, buf, ch, 0):将读取的数据发送到服务器。如果发送失败,将返回一个负数值。

close(socket_fd);:关闭套接字。

在主循环中,该客户端将不断地从标准输入读取数据并将其发送到服务器,直到程序被强制终止。

结果展示

 

来源地址:https://blog.csdn.net/weixin_42352787/article/details/130202059

--结束END--

本文标题: TCP实现服务器和客户端通信

本文链接: https://www.lsjlt.com/news/397035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • TCP实现服务器和客户端通信
    目录 TCP介绍 代码实现 server(服务器端) 代码分析 client(客户端) 代码分析 结果展示 TCP介绍 TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传...
    99+
    2023-09-06
    tcp/ip 服务器 网络
  • tcp通信,客户端服务端
    进行过程  //TCP通信的流程 //服务器端(被动接受连接的角色) 创建一个用于监听的套接字         -监听:监听有客户端的连接         -套接字:这个套接字其实就是一个文件描述符 将这个监听文件描述符和本...
    99+
    2023-09-09
    tcp/ip 服务器 网络
  • QT实现TCP通信(服务器与客户端搭建)
    一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象,该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态,监听时,可以监听指定的ip地址,也可以监听所有主机地址,可以通过指定端口号,也可以让服...
    99+
    2023-10-21
    服务器 tcp/ip 网络
  • C++多线程实现TCP服务器端同时和多个客户端通信
    通讯建立后首先由服务器端发送消息,客户端接收消息;接着客户端发送消息,服务器端接收消息,实现交互发送消息。 服务器同时可以和多个客户端建立连接,进行交互; 在某次交互中,服务器端...
    99+
    2022-11-12
  • 服务端和客户端通信-TCP(含完整源代码)
    简单TCP通信实验 目录 简单TCP通信实验 分析 1、套接字类型 2、socket编程步骤 3、socket编程实现具体思路 实验结果截图 程序代码 实验设备:    目标系统:windows 软件工具:vs2022/VC6/dev ...
    99+
    2023-09-22
    tcp/ip 网络 服务器
  • Python基于socket实现TCP/IP客户和服务器通信
    目录前言简单的搭建服务器与客户端服务器客户端create_connection(更简易的客户端)前言 套接字除了用于分析网络地址等功能之外,还可以配置一个服务器,监听到来的消息。 比如你在网络上跟网络机器人聊天,你发...
    99+
    2022-06-02
    Python 客户和服务器通信 Python TCP/IP 通信
  • 基于node的tcp客户端和服务端的简单通信
    目录1.简单介绍下TCP/IP2.服务端编程监听客户端连接接收数据和发送数据3.客户端编程4.一个小的登录系统1.简单介绍下TCP/IP TCP/IP是互联网相关协议的集合,分为以下...
    99+
    2022-11-13
  • Python基于socket如何实现TCP/IP客户和服务器通信
    这篇文章主要为大家展示了“Python基于socket如何实现TCP/IP客户和服务器通信”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python基于socket如何实现TCP/IP客户和服务...
    99+
    2023-06-15
  • Python基于socket实现TCP客户端和服务端
    目录一、基于socket实现的TCP客户端二、基于socket实现的TCP服务端三、socket实现的多任务版TCP服务端1、面向对象版本一、基于socket实现的TCP客户端 im...
    99+
    2022-11-10
  • python客户端与服务器端通信怎么实现
    Python客户端与服务器端通信可以通过套接字(socket)实现。1. 服务器端首先需要创建一个套接字,并绑定到指定的IP地址和端...
    99+
    2023-09-08
    python 服务器
  • Python socket网络编程TCP/IP服务器与客户端通信
    Python socket网络编程 初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深...
    99+
    2022-06-04
    客户端 网络编程 通信
  • Android编程实现TCP、UDP客户端通信功能示例
    本文实例讲述了Android编程实现TCP、UDP客户端通信功能。分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下...
    99+
    2022-06-06
    示例 udp 通信 Android
  • python创建tcp服务端和客户端
    1.tcp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 9999 6 BUFSIZ = 1024 7 A...
    99+
    2023-01-30
    服务端 客户端 python
  • nodejs如何实现TCP服务器端和客户端聊天功能
    这篇文章主要介绍了nodejs如何实现TCP服务器端和客户端聊天功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:服务器端var&...
    99+
    2022-10-19
  • Python基于socket怎么实现TCP客户端和服务端
    这篇文章主要讲解了“Python基于socket怎么实现TCP客户端和服务端”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于socket怎么实现TCP客户端和服务端”吧!一、基...
    99+
    2023-06-30
  • java中TCP实现回显服务器及客户端
    目录前言:Socket APISeverSocket APITCP实现回显服务器TCP实现回显客户端前言: 上篇文章介绍了TCP的特点。由于TCP的特点是有连接,面向字节流,可靠传输...
    99+
    2023-02-05
    java TCP回显服务器 java TCP 回显客户端
  • Android实现蓝牙客户端与服务器端通信示例
    一、首先说明:蓝牙通信必须用手机测试,因为avd里没有相关的硬件,会报错! 好了,看看最后的效果图:   二、概述: 1.判断是否支持Bluetooth ...
    99+
    2022-06-06
    客户端 服务器 示例 通信 服务器端 Android 蓝牙
  • C#中怎么实现服务端与客户端通信
    C#中怎么实现服务端与客户端通信,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#服务端与客户端通信实现实例:TcpClient client;&nb...
    99+
    2023-06-17
  • C#中如何实现服务端与客户端通信
    这篇文章将为大家详细讲解有关C#中如何实现服务端与客户端通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端通信实现实例:class Server {&n...
    99+
    2023-06-17
  • C#实现简单TCP服务器和客户端网络编程
    在C#中进行网络编程涉及许多类和命名空间,用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间: System.Net 命名空间:这个命名空间提供了大部分网络编程所需的类,包括: IPAddress:用于表示IP地址。...
    99+
    2023-10-09
    c# 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作