<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>网络编程</title>
    <link>https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/</link>
    <description>阿征的运维笔记</description>
    <language>zh</language>
    <atom:link href="https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>TCP 编程</title>
      <link>https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/tcp%E7%BC%96%E7%A8%8B/</link>
      
      <guid>https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/tcp%E7%BC%96%E7%A8%8B/</guid>
      <description>&lt;h2 id=&#34;tcp-服务端编程&#34;&gt;TCP 服务端编程&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#tcp-%e6%9c%8d%e5%8a%a1%e7%ab%af%e7%bc%96%e7%a8%8b&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;下面这些步骤概括了一个基本的TCP服务端程序的工作流程。您可以根据具体需求对其进行扩展和优化，例如使用多线程或多进程处理多个客户端连接，或实现更复杂的应用程序逻辑。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-导入-socket-模块&#34;&gt;1. 导入 socket 模块&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#1-%e5%af%bc%e5%85%a5-socket-%e6%a8%a1%e5%9d%97&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;首先，您需要导入Python的socket模块，以便使用套接字相关的函数。&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;socket&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;2-创建-socket-对象&#34;&gt;2. 创建 Socket 对象&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#2-%e5%88%9b%e5%bb%ba-socket-%e5%af%b9%e8%b1%a1&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Socket对象是用于网络通信的主要构件，它允许你在计算机之间建立通信链接，并发送/接收数据。&lt;/p&gt;&#xA;&lt;h3 id=&#34;socketsocket&#34;&gt;socket.socket()&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#socketsocket&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;socket.socket()&lt;/code&gt; 函数是用于创建套接字对象的函数，它是Python中进行网络通信的重要构建之一。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;以下是 &lt;code&gt;socket.socket()&lt;/code&gt; 函数的详细语法解释：&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;family&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;proto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fileno&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;family&lt;/code&gt;（地址族，address family）：套接字的地址族。通常可以选择的值包括：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.AF_INET&lt;/code&gt;：IPv4 地址族。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.AF_INET6&lt;/code&gt;：IPv6 地址族。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.AF_UNIX&lt;/code&gt; 或 &lt;code&gt;socket.AF_LOCAL&lt;/code&gt;：Unix 域套接字（用于本地通信）。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.AF_PACKET&lt;/code&gt;：数据链路层套接字。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;type&lt;/code&gt;（套接字类型，socket type）：套接字的类型，通常可以选择的值包括：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.SOCK_STREAM&lt;/code&gt;：TCP 套接字，用于可靠的、面向连接的流式通信。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.SOCK_DGRAM&lt;/code&gt;：UDP 套接字，用于无连接的数据报通信。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;socket.SOCK_RAW&lt;/code&gt;：原始套接字，用于直接访问网络协议层。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;proto&lt;/code&gt;（协议编号，protocol）：通常可以省略，表示默认的协议。对于某些特定的套接字类型和地址族，可以指定协议编号，例如，&lt;code&gt;socket.IPPROTO_TCP&lt;/code&gt; 或 &lt;code&gt;socket.IPPROTO_UDP&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fileno&lt;/code&gt;：可选参数，表示已存在的文件描述符。如果提供了这个参数，将创建一个套接字对象，该对象将与现有文件描述符关联，而不是创建一个新的套接字。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;返回值：&lt;code&gt;socket.socket()&lt;/code&gt; 函数返回一个新创建的套接字对象。&lt;/p&gt;&#xA;&lt;p&gt;这个函数的调用用于创建不同类型的套接字，以适应不同的网络通信需求。根据你的应用程序和通信协议的选择，你可以使用不同的参数来创建不同类型的套接字对象。然后，你可以使用这些套接字对象来进行网络通信、绑定地址和端口、监听连接、接受连接、发送和接收数据等各种操作。&lt;/p&gt;&#xA;&lt;h3 id=&#34;示例创建一个ipv4-tcp套接字&#34;&gt;示例：创建一个IPv4 TCP套接字&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e7%a4%ba%e4%be%8b%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aaipv4-tcp%e5%a5%97%e6%8e%a5%e5%ad%97&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;socket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 创建一个IPv4 TCP套接字&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;server_socket&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AF_INET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SOCK_STREAM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;示例创建一个ipv6-udp套接字&#34;&gt;示例：创建一个IPv6 UDP套接字&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e7%a4%ba%e4%be%8b%e5%88%9b%e5%bb%ba%e4%b8%80%e4%b8%aaipv6-udp%e5%a5%97%e6%8e%a5%e5%ad%97&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-py&#34; data-lang=&#34;py&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;socket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 创建一个IPv6 UDP套接字&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;udp_socket&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AF_INET6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SOCK_DGRAM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;socket-选项和设置可选&#34;&gt;Socket 选项和设置（可选）&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#socket-%e9%80%89%e9%a1%b9%e5%92%8c%e8%ae%be%e7%bd%ae%e5%8f%af%e9%80%89&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;你可以设置一些套接字选项，如超时、重用地址等，以满足你的需求。&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>UDP编程</title>
      <link>https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/udp%E7%BC%96%E7%A8%8B/</link>
      
      <guid>https://llinux.cn/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/udp%E7%BC%96%E7%A8%8B/</guid>
      <description>&lt;h2 id=&#34;udp-服务端编程&#34;&gt;UDP 服务端编程&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#udp-%e6%9c%8d%e5%8a%a1%e7%ab%af%e7%bc%96%e7%a8%8b&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;udp-客户端编程&#34;&gt;UDP 客户端编程&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#udp-%e5%ae%a2%e6%88%b7%e7%ab%af%e7%bc%96%e7%a8%8b&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;</description>
    </item>
    
  </channel>
</rss>
