IT袋

当前位置:主页 > 经验教程 > 建站编程 >

tcp网络通信的基本流程

tcp网络通信的基本流程 TCP网络通信流程概要(2)

时间:2024-01-09 15:59:03 来源:IT袋 作者:马勇
导读:tcp网络通信的基本流程,客户端实现代码: /** * TCP客户端通信基本流程 * zhangyl 2018.12.13 */#include sys/types.h> #include sys/socket.h>#include arpa/inet.h>#include unistd.h>#include iostream>#include strin

tcp网络通信的基本流程

客户端实现代码:

/**
 * TCP客户端通信基本流程
 * zhangyl 2018.12.13
 */
#include <sys/types.h> 
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <iostream>
#include <string.h>
#define SERVER_ADDRESS "127.0.0.1"
#define SERVER_PORT     3000
#define SEND_DATA       "helloworld"
int main(int argc, char* argv[])
{
    //1.创建一个socket
    int clientfd = socket(AF_INET, SOCK_STREAM, 0);
    if (clientfd == -1)
    {
        std::cout << "create client socket error." << std::endl;
        return -1;
    }
    //2.连接服务器
    struct sockaddr_in serveraddr;
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_addr.s_addr = inet_addr(SERVER_ADDRESS);
    serveraddr.sin_port = htons(SERVER_PORT);
    if (connect(clientfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) == -1)
    {
        std::cout << "connect socket error." << std::endl;
        close(clientfd);
        return -1;
    }
 //3. 向服务器发送数据
 int ret = send(clientfd, SEND_DATA, strlen(SEND_DATA), 0);
 if (ret != strlen(SEND_DATA))
 {
  std::cout << "send data error." << std::endl;
  close(clientfd);
        return -1;
 }
 
 std::cout << "send data successfully, data: " << SEND_DATA << std::endl;
 
 //4. 从服务器收取数据
 char recvBuf[32] = {0};
 ret = recv(clientfd, recvBuf, 32, 0);
 if (ret > 0) 
 {
  std::cout << "recv data successfully, data: " << recvBuf << std::endl;
 } 
 else 
 {
  std::cout << "recv data error, data: " << recvBuf << std::endl;
 }
 
 //5. 关闭socket
 close(clientfd);
    return 0;
}

以上代码,服务器端在地址0.0.0.0:3000启动一个侦听,客户端连接服务器成功后,给服务器发送字符串”helloworld”;服务器收到后,将收到的字符串原封不动地发给客户端。

在 Linux Shell 界面输入以下命令编译服务器端和客户端:

# 编译 server.cpp 生成可执行文件 server   
[root@localhost testsocket]# g++ -g -o server server.cpp
# 编译 client.cpp 生成可执行文件 client
[root@localhost testsocket]# g++ -g -o client client.cpp

接着,我们看下执行效果,先启动服务器程序:

[root@localhost testsocket]# ./server

再启动客户端程序:

[root@localhost testsocket]# ./client 

这个时候客户端输出:

send data successfully, data: helloworld
recv data successfully, data: helloworld

服务器端输出:

recv data from client, data: helloworld
send data to client successfully, data: helloworld

以上就是 TCP socket 网络通信的基本原理,对于很多读者来说,上述代码可能很简单,更有点“玩具”的意味。

但是深刻理解这两个代码片段是进一步学习开发复杂的网络通信程序的基础。

上述分享的tcp网络通信的基本流程的IT数码常识,如果能给您带来帮助,记得常来IT袋网网!

相关阅读

  • 网站如何建立才对 公司建立网站的步骤

    网站如何建立才对 公司建立网站的步骤

    今日IT小知识分享:网站如何建立才对和公司建立网站的步骤的相关介绍,接下来分享详细内容。 目前市面上有不少开源的CMS系统,可以快速搭建一个网站,但是延展性、安全性、功能适配性

  • tcp网络通信的基本流程 TCP网络通信流程概要

    tcp网络通信的基本流程 TCP网络通信流程概要

    跟大家聊一聊tcp网络通信的基本流程的相关经验,接下来就是全面介绍。 不管多么复杂的服务器或客户端程序,其网络通信的基本原理一定如下所述: 对于服务器,其通信流程一般有如下步骤

  • 网页设计排版框架怎么做 网站页面布局和样式设计

    网页设计排版框架怎么做 网站页面布局和样式设计

    一个电脑小知识,为大家介绍网页设计排版框架怎么做和网站页面布局和样式设计的IT小经验,一起跟随小编看看吧! 网页设计是创建网站流程中不可避免的策划工作,网页设计更是关切用户

  • Redis锁被别人释放解决办法

    Redis锁被别人释放解决办法

    一篇方法教程,与您分享Redis锁被别人释放解决办法的相关经验,接下来一起来看看吧。 什么是分布式锁? 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 线程锁:主要