21xrx.com
2024-11-24 12:19:48 Sunday
登录
文章检索 我的文章 写文章
C++套接字编程
2023-07-13 05:48:05 深夜i     --     --
C++ 套接字编程 网络编程 TCP/IP UDP

套接字编程指的是利用计算机网络提供的通信方式进行通信的编程技术。在C++编程中,套接字编程是十分重要的一个方向。因为利用套接字可以实现不同计算机之间的数据传输,同时也可以在同一台计算机上实现不同进程之间的通信。下面将会介绍C++套接字编程的概念及其使用方法。

套接字是一种抽象的通信接口,它是用来建立在不同计算机间或同一计算机上的不同进程之间的通信的。我们可以通过操作系统的API调用来实现该接口,就可以进行网络通信。在C++中,套接字编程是通过调用socket函数来获得套接字描述符,进而对其进行读写操作。

例如,下面的代码展示了如何创建一个TCP服务器:


#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <string.h>

#include <unistd.h>

#include <iostream>

using namespace std;

int main()

{

  // 创建socket套接字

  int fd = socket(AF_INET, SOCK_STREAM, 0);

  if(fd == -1)

  {

    perror("socket");

    return -1;

  }

  

  // 设置本地IP地址及端口

  struct sockaddr_in local_addr;

  memset(&local_addr, 0, sizeof(local_addr));

  local_addr.sin_family = AF_INET;

  local_addr.sin_addr.s_addr = inet_addr("192.168.1.111");

  local_addr.sin_port = htons(7777);

  

  // 将套接字与本地IP地址及端口绑定

  if(bind(fd, (struct sockaddr*)&local_addr, sizeof(local_addr)) == -1)

  {

    perror("bind");

    return -1;

  }

  

  // 开启监听,最大连接数为10

  if(listen(fd, 10) == -1)

  {

    perror("listen");

    return -1;

  }

  

  // 取得客户端套接字描述符

  struct sockaddr_in client_addr;

  int len = sizeof(client_addr);

  int client_fd = accept(fd, (struct sockaddr*)&client_addr, (socklen_t*)&len);

  if(client_fd == -1)

  {

    perror("accept");

    return -1;

  }

  

  // 向客户端发送数据

  char str[] = "Hello,Client!";

  ssize_t ret = write(client_fd, str, strlen(str));

  if(ret == -1)

  {

    perror("write");

    return -1;

  }

  cout << "Send data:" << str << endl;

  

  close(client_fd);

  close(fd);

  return 0;

}

一般来说,套接字编程往往需要通过多线程技术实现。在多线程中,我们可以同时进行多个客户请求的处理,从而提高了程序的并发处理能力。例如,在上面的TCP服务器中,我们可以针对不同的套接字描述符开启一个新线程来处理不同的客户请求。

总之,套接字编程是一种十分重要的计算机网络编程技术,在C++开发中尤为重要。大家可以从实现TCP服务器开始学习,掌握基本的套接字编程技术,然后进一步探究多线程及UDP等方面的应用。有了这些基础,我们就可以在网络通信中任意的进行数据传输了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复