首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux网络服务器编程:TCP与UDP详解

虽然本文标题是Linux网络服务器编程,socket网络编程的技术也多用于服务器编程,但其实客户端中也有使用这个技术的关键场景:长连接。...Linux网络服务器编程中,TCP和UDP是两种主要的传输层协议。本文将详细分析TCP和UDP在服务器编程中的使用、原理、代码示例、数据流动,以及一些异常情况的处理方式。...二、Socket的使用 在Linux网络服务器编程中,我们使用socket来实现TCP和UDP通信。...server_addr.sin_family = AF_INET:设置sockaddr_in结构体中的地址族字段为AF_INET,表示使用IPv4协议。...五、总结 本文详细讨论了Linux网络服务器编程中TCP和UDP两种方式的socket使用、原理分析、代码示例、数据流动时序图,以及一些异常情况的处理方式。

19010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TCP网络编程中connect()、listen()和accept()三者之间的关系 ( 非常重要!!)

    connect()函数 对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux...内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅谈 TCP 三次握手》),最后把连接的结果返回给这个函数的返回值(成功连接为0, 失败为-1)。...这里需要注意的是,listen()函数不会阻塞,它主要做的事情为,将该套接字和套接字对应的连接队列长度告诉 Linux 内核,然后,listen()函数就结束。...这样的话,当有一个客户端主动连接(connect()),Linux 内核就自动完成TCP 三次握手,将建立好的链接自动存储到队列中,如此重复。...但实际上Linux的并不是这样的!

    2.8K30

    Linux网络编程TCP

    OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...服务端API接口 socket #include int socket(int family //协议簇 一般 AF_INET PF_INET ,int type /...*address//协议族地址 ,socklen_t address_len); //协议族长度 - address: 协议族地址,通用的socket地址 通用的socket地址不是很好用,所以Linux

    5.4K30

    Linux网络编程之使用TCP传输文件

    原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8976263,作者:gqb666 最近在写Linux网络方面的... 其中,server端先运行,client端与server端的端口号必须一致并且不能与已知端口冲突(例如8888即可) 下面将代码贴上:(使用UDP传输文件请参阅博文Linux...) {           perror("Open file failed\n");           exit(0);       }   if ((sock_id = socket(AF_INET...;   serv_addr.sin_port = htons(atoi(argv[2]));       inet_pton(AF_INET, argv[1], &serv_addr.sin_addr...    fclose(fp);       close(sock_id);       printf("Send Finish\n");       return 0;   }   下转博文:Linux

    2.7K10

    linux源码看socket的阻塞和非阻塞

    笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...一个TCP非阻塞client端简单的例子 如果我们要产生一个非阻塞的socket,在C语言中如下代码所示: // 创建socket int sock_fd = socket(AF_INET, SOCK_STREAM...socket的创建 很明显,内核的第一步应该是通过AF_INET、SOCK_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: 我们跟踪源码调用 socket(...,注意在操作系统里面定义了PF_INET等于AF_INET, 内核通过函数指针实现了对pf(net_proto_family)的重载。...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。

    4.7K20

    Python的socket使用

    socket(简称 套接字) 是进程间通信的一种方式,实现不同主机间的进程间通信,比如QQ socket.socket(AddressFamily, Type) Address Family:可以选择 AF_INET...(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP...协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) UDP发送数据 from socket import * udpSocket = socket(AF_INET, SOCK_DGRAM...3.listen使套接字变为监听状态 4.accept等待客户端的信息 5.recv/send接收发送数据 from socket import * tcpSerSocket = socket(AF_INET...#绑定本地的ip和端口 tcpSerSocket.bind(address) tcpSerSocket.listen(5)# 将socket变为监听状态,listen是建立连接的**队列**的个数,linux

    1K30

    网络编程:socket 编程

    套接字分为2种: -基于文件型的套接字家族 AF_UNIX 用于一台机器的不同程序之间 linux 一切皆文件,基于文件的套接字调用的是底层的文件系统来取数据,2个套接字进程运行在同一个机器,可以通过访问同一个文件系统来间接完成通信...-基于网络类型的套接字家族 AF_INET 用于网络编程 通过网络来实现2个程序通讯 socket 基于tcp运行流程图如下: 例如: 服务端: import socket phone = socket.socket...socket import * ip_import =('192.168.1.3',8000) back_log = 5 buffer_size = 1024 tcp_server = socket(AF_INET...服务端多次接收双向连接 windows 系统和linux/mac系统下,socket 不同之处: 断开客户端,windows 系统下服务端会报错,而linux/mac系统下,服务端接收的是空。...data = tcp_client.recv(buffer_size) print('收到服务端发来的消息',data.decode('utf-8')) tcp_client.close() linux

    2.7K50

    网络编程 - Linux Socket编程

    Linux Socket编程 ---- 目录 前言 Socket的功能 Socket基础 Socket类型 基本结构 基本转换函数 基本Socket使用 TCP Socket实例 UDP Socket实例...主要参考《Linux网络编程》。本篇源码获取方式见文底小字。 Socket的功能   socket是通过标准的UNIX文件描述符和其他的程序通讯的一个方法。...例如,sa_family为AF_INET时,sa_data要传IP地址和端口号。...基本Socket使用   Linux同时支持面向连接和不连接类型的套接字。在面向连接的通讯中服务器和客户机在交换数据之前先要建立一个连接;在不连接通讯中数据被作为信息的一部分被交换。  ...dstAddr.sin_addr.s_addr = inet_addr(ipAddr.c_str()); dstAddr.sin_port = htons(atoi(port.c_str())); // Linux

    9.7K50

    linux源码看socket的阻塞和非阻塞 顶

    linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。...笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。...socket的创建 很明显,内核的第一步应该是通过AF_INET、SOCK_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: ?...协议,注意在操作系统里面定义了PF_INET等于AF_INET, 内核通过函数指针实现了对pf(net_proto_family)的重载。...希望笔者这篇文章能帮助到阅读linux网络协议栈代码的人。

    3.6K20

    从零开始:Linux 网络基础到聊天室搭建

    __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen, int flags);Linux...中的 Socket如果说在 Java 中,万物皆对象,那么在Linux中可以说万物皆文件。...Socket 也是一种文件,所以 Linux 在网络传输的过程中可以使用文件I/O相关的函数。// sys_close函数用于关闭一个已打开的文件描述符。// 参数: fd - 要关闭的文件描述符。...int sys_close(int fd)在Linux中创建一个Socket,通过下面的方法实现// @param family 套接字地址族,如AF_INET表示IPv4// @param type...失败时返回-1并设置errnoint __sys_socket(int family, int type, int protocol);family这里和font family类似,可以理解为“族”,你可以在linux

    21020
    领券