TCP Socket编程示例

介绍

本文主要学习TCP socket编程的代码。socket常用于客户端发起连接,服务端一般都会用一些高性能网络框架,不会让你手写socket服务端的。客户端代码基本都差不多。

服务端

server.cpp:

#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>

constexpr uint16_t port = 6000;

int main() {
    int fd = socket(AF_INET, SOCK_STREAM, 0);   //创建用于监听的套接字
    if (fd < 0) {
        return -1;                              
    }

    sockaddr_in addr = {AF_INET, htons(port), 0};       //监听本机所有网络接口,并指定端口号
    if (bind(fd, (sockaddr*)&addr, sizeof(addr)) < 0) { //绑定
        close(fd);
        return -1;
    }
    
    if (listen(fd, 128) < 0) {  //开始监听;参数2:设置全连接(accept)队列长度
        return -1;
    }

    uint32_t addrLen = sizeof(addr);
    int cfd = accept(fd, (sockaddr*)&addr, &addrLen);   //阻塞等待,获取一条连接
    if (cfd < 0) {
        return -1;
    }
    

    //下面就是通信代码了
    //接收客户端消息
    char buf[1024] = {0};
    int size = recv(cfd, buf, sizeof(buf), 0); 
    if (size <= 0) {
        return -1;  //<0:recv failed!    ==0:socket connect close!
    }
    std::cout << buf << std::endl;

    //向客户端发消息
    if (send(cfd, buf, strlen(buf), 0) < 0) {
        return -1;
    }

    close(cfd);
    close(fd);
}

客户端

client.cpp:

#include <iostream>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>

constexpr uint16_t port = 6000;
const std::string ip("127.0.0.1");

int main() {
    int cfd = socket(AF_INET, SOCK_STREAM, 0);  //创建用于通信的socket
    if (cfd < 0) {
        return -1;
    }

    sockaddr_in addr = {AF_INET, htons(port), inet_addr(ip.c_str())};//对于客户端来说,这里要指定服务器的ip、port
    if (connect(cfd, (sockaddr*)&addr, sizeof(addr)) < 0) {         //连接
        return -1;
    }
    

    //发送消息
    char buf[1024] = "12345";
    if (send(cfd, buf, strlen(buf), 0) < 0) {
        return -1;
    }

    //接收消息
    int size = recv(cfd, buf, strlen(buf), 0);
    if (size <= 0) {
        return -1; //<0:recv failed!    ==0:socket connect close!
    }
    std::cout << buf << std::endl;

    close(cfd);
}

编译运行

g++ server.cpp -o server
g++ client.cpp -o client
./server
./client

相关推荐

  1. OpenSSL 编程示例

    2024-07-20 13:34:05       62 阅读
  2. UDP socket编程示例

    2024-07-20 13:34:05       45 阅读
  3. TCP Socket编程示例

    2024-07-20 13:34:05       36 阅读
  4. MFC多线程编程示例1

    2024-07-20 13:34:05       61 阅读
  5. C++类的设计编程示例

    2024-07-20 13:34:05       39 阅读
  6. CUDA:基于模板项目的示例应用程序编程

    2024-07-20 13:34:05       61 阅读
  7. C++编程:使用boost::gil::channel_type的示例程序

    2024-07-20 13:34:05       70 阅读
  8. 使用boost::range_const_iterator的示例程序 - 编程

    2024-07-20 13:34:05       70 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 13:34:05       168 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 13:34:05       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 13:34:05       155 阅读
  4. Python语言-面向对象

    2024-07-20 13:34:05       169 阅读

热门阅读

  1. windows上安装Apache

    2024-07-20 13:34:05       27 阅读
  2. 信息查询_社工

    2024-07-20 13:34:05       26 阅读
  3. Clickhouse 物化视图-optimize无效

    2024-07-20 13:34:05       34 阅读
  4. 07.16_111期_linux_网络通信

    2024-07-20 13:34:05       30 阅读
  5. 我为什么要使用Vim编辑器?

    2024-07-20 13:34:05       25 阅读
  6. 微服务概念篇-服务提供者/服务消费者

    2024-07-20 13:34:05       30 阅读
  7. 后端配置了相关字段后的前端跨域处理

    2024-07-20 13:34:05       32 阅读
  8. IP地址:由电脑还是网线决定?

    2024-07-20 13:34:05       29 阅读
  9. 【AI工具基础】—B树(B-tree)

    2024-07-20 13:34:05       30 阅读