python编程从入门,python编程基础知识

  python编程从入门,python编程基础知识

  基础Python套接字编程入门课程

  本文介绍了用Python对socket进行网络编程。假设读者具备网络编程和Python语法的基础知识,除非另有说明,否则本文中的所有代码都将在Python 3.4上运行。

  Python的socket函数封装在socket库中。要使用套接字,请先参考官方文档,了解有关导入套接字和套接字库的详细信息。

  创建套接字

  首先创建一个socket,然后使用socket库中的socket函数来创建。

  导入插座

  #创建一个INET流套接字

  s=socket.socket(socket.af_inet,socket。SOCK_STREAM).

  在该示例中,创建了一个TCP套接字。socket.socket函数的前两个参数的默认值是socket。AF_INET和socket。SOCK_STREAM,它们在创建TCP套接字时被直接写成socket.socket()。

  连接到服务器

  使用套接字的连接功能连接到服务器。以下所有参数都有效:

  s.connect()、localhost()、8000)

  s.connect((127.0.0.1),8000))

  s.connect((www。Baidu.com),80))

  数据发送

  发送数据有两种方式:send和sendall。Send不保证所有数据都已发送,但返回发送数据的长度。程序循环发送数据,直到所有数据都发送完毕。

  频率差(s,msg):

  总长度=长度(消息)

  total_sent=0

  而总计发送总计长度:

  sent=s.send (msg [ total _ sent : ]

  如果发送==0:

  引发运行时错误(套接字连接块)。

  total _ sent=已发送

  Sendall确保发送所有数据,除非发送过程中出现错误。事实上,它会重复发送数据,直到所有数据都发送完毕。

  在这里,我还想说一点需要特别注意的。让我们从一个例子开始:

  导入插座

  s=socket.socket(

  s.connect((www。Baidu.com),80))

  S.sendall(测试))。

  都是上面的东西,没什么特别的。分别在Python 2和Python 3上运行上述代码后,结果如下。

  # Python 2.7

  导入插座

  s=socket.socket(

  s.connect((www。Baidu.com),80))

  S.sendall(测试))。

  在Python 2上成功执行。

  # Python 3.4

  导入插座

  s=socket.socket(

  s.connect((www。Baidu.com),80))

  S.sendall(测试))。

  跟踪(mostrecentcalllast):

  文件中的第1行

  type error:“str”doesnotsupportthebufferinterface

  Python中出现异常。

  即使同样的代码改变了环境,也无法执行。我是对的。愤怒的电脑。所以,你真的是对的。环境变了。请把这个结果的变化转给官方解释。

  接收数据

  使用recv功能接收数据:

  是数据=s.recv(4096)

  Python 3返回一个字节对象,Python 2返回一个字符串。请注意,函数返回的数据长度小于或等于参数指定的长度。要接收指定长度的数据,必须循环接收数据。

  差分接收器(msglen):

  chunks=[]

  bytes_recd=0

  while bytes_recd msglen:

  chunk=s . recv(min(ms glen-bytes _ recd,2048))

  如果chunk==b :则:

  引发运行时错误(套接字连接块))。

  chunks.append(chunk).

  bytes_RECD=bytes_RECDlen(chunk)).

  returnb“”。加入(块))).

  紧密联系

  如果不再需要该连接,可以使用Close关闭套接字连接。无法建立任何关闭的连接。插座回收后会自动关闭,但不要依赖这个机制。不需要的时候主动关掉插座。

  计算机网络服务器

  在服务器上执行程序的步骤:

  1.创建服务器套接字。

  1.将服务器套接字绑定到指定的地址和端口。

  1.监控连接

  1.接受客户端连接。

  1.处理客户端数据

  1.关闭客户端连接

  简单回显服务器示例:

  导入插座

  主机=

  端口=10022

  s=socket.socket(socket.af_inet,socket。SOCK_STREAM).

  S.bind((主机,端口))

  南听着.

  接受(

  虽然正确:

  是数据=Conn.recv(1024)

  如果不是数据:

  布莱克

  是Conn.sendall(数据)

  conn.close()

  客户端程序:

  导入插座

  HOST=localhost

  端口=10022

  s=socket.socket(socket.af_inet,socket。SOCK_STREAM).

  s.connect()端口,PORT))

  森道尔(bHellosocket ).

  DATA=s.recv(1024)).

  打印(( received ,repr))数据()))))))。

  s.close())

  错误处理

  当套接字处理过程中出现错误时,将引发异常。与插座相关的例外情况如下:

  -套接字.错误

  - socket.herror

  - socket.gaierror

  -套接字.超时

  导入插座

  主机=无

  端口=10022

  尝试:

  s=socket.socket(socket.af_inet,socket。SOCK_STREAM).

  S.bind((主机,端口))

  南听着.

  例外:socket.errorasmsg:

  是打印(消息)

  看完谢谢。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: