首页 > 编程语言 >SOCKET网络编程

SOCKET网络编程

时间:2024-07-24 16:40:35浏览次数:11  
标签:addr struct sockaddr 编程 网络 server fd sizeof SOCKET

socket网络通信

socket能够解决的问题是客户端和服务器端进行交流的问题

服务器server

  1. socket() 的作用是创建一个端点,然后返回一个fd指向这个端点。包括分配fd和分配tcb进程控制块两。接受三个参数需要指定通信域 domain(AF_INET, AF_INET6)、指定通信语义type(SOCK_STREA,SOCK_DGRAM)、指定通信协议protocol(0代表为通信语义进行默认的协议配置),返回一个fdfd是以bitmap实现的。

    int fd = socket(AF_INET, SOCK_STREAM, 0);
    
  2. bind()的作用是将地址绑定到对应fdtcb控制块上,这是因为socket分配之后,会存在一个命令空间(地址族),接受三个参数fd,地址,地址长度。

    struct sockaddr_in server; // 声明一个IPV4地址类型
    socklen_t len = sizeof(server);
    memset(&server, 0 , sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = inet_addr(IP);
    bind(fd, (struct sockaddr*)&server, &len);
    
  3. ``listen()的作用是使socket监听连接,接受两个参数fdbacklogbacklog`指针最多挂起几个tcp连接。

    listen(fd, 10);
    
  4. accept( )的作用使接受完成的tcp连接,接受三个参数,服务端fd和客户端地址和客户长度,返回客户fd

    struct sockaddr_in server; // 声明一个IPV4地址类型
    socklen_t len = sizeof(server);
    memset(&server, 0 , sizeof(server));
    int clientfd = accept(fd, (struct sockaddr*)&client, &c_len);
    

客户端client

  1. socket()

    int fd = socket(AF_INET, SOCK_STREAM, 0);
    
  2. bind(),客户端可以进行bind,也可以不进行bind,不bind的话会默认分配地址和端口。

    struct sockaddr_in client; // 声明一个IPV4地址类型
    socklen_t len = sizeof(client);
    memset(&server, 0 , sizeof(client));
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = inet_addr(IP);
    bind(fd, (struct sockaddr*)&client, &len);
    
  3. connect()的作用是将sockfd与对应地址fd进行连接,接受三个参数fd,地址,地址长度,返回0表示连接成功。

    struct sockaddr_in server; // 声明一个IPV4地址类型
    socklen_t len = sizeof(server);
    memset(&server, 0 , sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(port);
    server.sin_addr.s_addr = inet_addr(IP);
    connect(fd, (struct sockaddr*)&server, &len)
    

注意

  1. 端口一旦被绑定,无法再次绑定

  2. 执行listen,可以通过netstat查看状态

  3. 进入listen,并且会产生新连接状态

  4. iotcp连接状态

  5. 一个fd对应一个tcp连接,唯一标识了一个客户

  6. int clientfd = accept(sockfd, (struct sockaddr*) &client, (socklen_t*)sizeof(client));这里对右值进行强转指针,那么右值会释放掉,那么指针就是未定义,所以要前面就开始定义。

  7. sudo fuser -k 2000/tcp杀死所有2000端口的tcp连接

  8. 没有accept就需要将fd IOtcp连接分开讲,有accept之后fd IOtcp连接就相同声明周期,已建立TCP连接但是阻塞在accept()

  9. IO就是一个fd,如果一个线程一个fd那么会产生很大的问题

  10. stdin, stdout, stderror分别是0,1,2fd,其它新建的连接会从3开始递增

标签:addr,struct,sockaddr,编程,网络,server,fd,sizeof,SOCKET
From: https://www.cnblogs.com/solicit/p/18321218

相关文章

  • 神经网络中常用的函数
    1、激活函数:F.relu(x):ReLU(RectifiedLinearUnit)激活函数,将输入 x 的所有负值置为0,正值保持不变。F.sigmoid(x):Sigmoid激活函数,将输入 x 映射到(0,1)区间。F.tanh(x):双曲正切激活函数,将输入 x 映射到(-1,1)区间。2、池化函数:F.max_pool1d(input,ker......
  • unet网络解析
    Unet网络结构学习记录导入包#!/user/bin/python#coding=utf-8importnumpyasnpimporttorchimporttorch.nnasnn能够访问PyTorch中定义的所有神经网络层(如全连接层、卷积层、池化层等)、损失函数(如交叉熵损失、均方误差损失等)以及激活函数(如ReLU、Sigmoid等importtor......
  • Java学习笔记(七)面向对象编程(中级部分)
    Hii,mJinXiang⭐前言⭐本篇文章主要介绍Java面向对象编程(中级部分)包、访问修饰符、封装、继承、super关键字、多态、向上(下)转型、equals、hashCode、断点调试等知识的详细使用以及部分理论知识......
  • Qt - 网络相关的类
    1.QHostInfoQHostInfo类为主机名查找提供了静态函数。QHostInfo查找与主机名关联的IP地址或与IP地址关联的主机名。这个类提供了两个方便的静态函数:一个异步工作并在找到主机时发出信号,另一个阻塞并返回QHostInfo对象。要异步查找主机的IP地址,调用lookupHost(),它接受主机名......
  • 从零开始:神经网络(1)——什么是人工神经网络
      声明:本文章是根据网上资料,加上自己整理和理解而成,仅为记录自己学习的点点滴滴。可能有错误,欢迎大家指正。     人工神经网络(ArtificialNeuralNetwork,简称ANN)是一种模仿生物神经网络结构和功能的计算模型。它由大量的节点(或称神经元)相互连接而成,这些节点通常......
  • Java基础编程500题——综合练习
    ......
  • 网络安全前景大好,转行这些职位成了“香饽饽”
    网络安全就业前景大数据、人工智能、云计算、物联网、5G等新兴技术的高速发展,蒸蒸日上。但是随之也出现了许多问题,比如:政府单位、企业、个人信息泄露,网络安全问题日益严峻,网络空间安全建设刻不容缓。网络安全人才需求量巨大,人才缺口高达95%,人才输送与人才缺口的比例严重不......
  • golang并发编程(新手向)
    golang并发所有工具的简单介绍1goroutine:准确来说这并不是一个和C#Java一样的线程,而是golangruntime管理的一个轻量级线程,但是我们完全可以把他当做是一个线程,使用go关键字来开启2channel:这是一种通信方式,相当于不同线程之间建立了管道通信的机制,管道有很多种,但是只要把......
  • 网络运维管理系统,维护企业网络信息安全的管理系统推荐!
    古有烽火传信,今则网络织就天下经纬;网络运维,企业之根本,信息之安全,重于泰山。当今,企业网络已成为企业运营的核心基础设施,其稳定性和安全性直接关系到企业的业务连续性和企业机密信息的保护,因此,选择一款高效、全面的网络运维管理系统对于维护企业网络信息安全至关重要。安企神软......
  • socket.io是什么协议?真的比http快吗
    官网地址:Socket.IO Socket.IO是一个库,可以在客户端和服务器之间实现 低延迟, 双向 和 基于事件的 通信。支持及时、双向与基于事件的交流。它可以在每个平台、每个浏览器和每个设备上工作,可靠性和速度同样稳定。注意Socket.IOSocket.IO 不是 WebSocket实现。尽管......