快速理解 socket 编程 (C/C++)

本文介绍了跨Linux和Windows的Socket编程,强调了两大平台下的相似性。文章涵盖Socket的基本概念,包括IP地址、端口、协议和数据传输方式,并通过示例演示了Linux和Windows下的Socket程序创建。此外,详细讲解了socket()、bind()、connect()、listen()和accept()函数的使用,帮助读者掌握Socket通信的关键步骤。
摘要由CSDN通过智能技术生成

同时学 Linux和Windows 的原因

大多项目在 Windows/Linux 下开发 client/server 端, 单独学1种平台 没实践意义

两大平台下 socket 编程非常相似

网络编程 就是 编写程序 使两台联网的计算机 相互交换数据, 这就是 socket 全部内容 吗?是的!

socket 编程 远比想象中简单

chapter1 socket 简介

socket: 套接字, 计算机间通信的一种 约定

socket 典型应用: Web 服务器 和 浏览器

    浏览器     
        获取 用户输入的 URL
        向 服务器 发起请求

    服务器
        分析收到的 URL
        将对应的网页内容返回给浏览器
        
    浏览器
        解析和渲染, 将文字、图片、视频 呈现给用户

1 IP Address

(1) 封装 到要发送的数据包

(2) 被 路由器 用于 寻址: 据 IP Address 找到 dst 计算机

本机地址: 127.0.0.1

2 Port

(1) 用于 区分 不同的 网络程序

    网络程序    端口号
    Web 服务  80
    FTP 服务  21
    SMTP 服务     25  

(2) 是 虚拟/逻辑 概念

可视为 一道门, data 通过这道门 流入流出, 每道门有不同的 编号, 即 端口号

3 Protocol

网络通信的双方遵守的约定

TCP/IP 协议族: TCP IP UDP Telnet FTP SMTP 等上百个关联协议
    TCP IP 常用

4 数据传输方式

常用2种:

(1) SOCK_STREAM

    面向连接
        重发
    
    http 协议用

 (2) SOCK_DGRAM

    无连接
        不作数据校验
        错了不重发
        
    QQ 视频/语音聊天 用

总结

IP Address 和 Port 能在互联网中 定位到要通信的程序

Protocol 和 数据传输方式 规定了 如何传输 数据

有了这些, 两台计算机就可以通信了

chapter2 Linux 下 socket 程序 Demo

功能: client 从 server 读1个字符串, 并打印出来

Linux 中, socket 也是文件, 有文件描述符, 可用 write() / read() 进行 I/O

 

// server.cpp
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main()
{
    // [1] 建 套接字:  IPv4 地址 / 面向连接的传输方式 / TCP 协议
    int listenfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    // Note: 指定 本端(Server) 协议族 / port / ipaddr
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr) );  
    serv_addr.sin_family = AF_INET;  
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  // 具体的IP地址
    serv_addr.sin_port = htons(1234)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值