基于Linux的C++之网络编程

套接字的基本概念

通信类型: 控制套接字如何传输和处理数据,数据以包的形式传输

  • 连接(connection)类型:确保所有包依序传输,如果丢包,则请求重传
  • 数据报(datagram)类型:不保证包的到达顺序,包可能丢失

名空间: 指定套接字地址格式

  • 本地名空间:套接字地址为普通文件名
  • Internet名空间:套接字地址由Internet地址和端口号(用于区分一台主机上的多个套接字)确定

协议: 确定数据如何传输

套接字函数

socket()函数: 创建套接字

  • 原型:int socket(int domain,int type,int protocol);
  • 参数:名空间、通信类型和协议
  • 名空间:PF_LOCAL(本地)或PF_INET(Internet)
  • 通信类型:SOCK_STREAM(连接类型)或SOCK_DGRAM(数据报类型)
  • 协议:传递0,让系统自动选择协议(通常为最佳协议)
  • 返回值:套接字描述符

close()函数: 释放套接字

  • 原型:int close(int fd);

connect()函数: 创建两个套接字之间的连接

  • 客户发起此系统调用,试图与服务器建立套接字连接
  • 原型:int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
  • 参数:sockfd 为文件描述符; addr 为指向套接字地址结构体指针(服务器地址);addrlen 为服务器地址字符串的长度
  • 返回值:0 连接成功; -1 连接失败

send()函数: 发送数据

  • 原型: ssize_t send(int sockfd,const void* buf,size_t len,int flags);
  • 只有在套接字处于连接状态时才可调用

bind()函数: 绑定套接字与其服务器地址

  • 原型:int bind(int sockfd,const struct sockaddr* addr,socklen_t addrlen);

listen()函数: 侦听客户连接

  • 原型:int listen(int sockfd,int backlog);
  • 参数:backlog 指定有多少个连接可以进入队列,超出该值的连接将被抛弃

accept()函数: 接受连接,为该连接创建一个新的套接字

  • 原型 int accept(int sockfd,struct sockaddr* addr,socklen_t addrlen);
  • 参数: addr 为指向套接字地址结构体(客户地址)的指针
  • 返回值:创建一个新的套接字,以接受客户连接,返回值为新的套接字文件描述符
  • 原先套接字文件描述符可以继续接受新连接

本地套接字示例:服务器端

#include <iostream>
#include <cstdio>
#include <c
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值