美文网首页Pythoner集中营
Python网络编程,TCP/IP服务器与客户端通信

Python网络编程,TCP/IP服务器与客户端通信

作者: MM_H | 来源:发表于2016-12-29 10:35 被阅读1427次

初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好看到了这部分网络编程,依然有好多不太理解的地方,不过想来通过自己不断的摸索,不断地搜寻资料学习,早晚应该会变得通透吧.......

这部分主要使用的模块就是 socket 模块,在这个模块中可以找到 socket()函数,该函数用于创建套接字对象,套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信。

socket()模块函数

要创建套接字,必须使用 socket.socket()函数,他一般的语法如下

        socket(socket_family, socket_type, protocol=0)

其中socket_family是 AF_UNIX或 AF_INET,socket_type 是 SOCK_STREAM 或 SOCK_DGRAM,protocol 通常省略,默认=0.
所以创建 TCP/IP 套接字,可以使用下面的方式调用 socket.socket().

        tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

同样创建 UDP/IP 套接字,使用下面的方法调用

        udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

创建 TCP 服务器

创建 TCP 服务器的流程基本如下,并非正真正的代码

        ss = socket()                    #创建服务器套接字
        ss.bind()                           #套接字与地址绑定
        ss.listen()                         #监听连接
        inf_loop:                          #服务器无限循环
                cs = ss.accepr()      #接受客户端连接
                comm_loop:            #通信循环
                        cs.recv()/cs.send()      #对话(接收/发送)
                cs.close()                #关闭客户端套接字
        ss.close()                        #关闭服务器套接字(可选)

实际中创建 TCP 服务器基本流程就如上边所说,可能稍有不同但基本思路应该是相通的,下边是真正穿件服务器的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *           #将 socket 属性引入到命名空间

HOST = ''                   #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571           #端口号
BUFSIZ = 1024          #缓冲区大小,1kb
ADDR = (HOST,PORT)      #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)       #创建 tcp 套接字
tcpSerSocket.bind(ADDR)                     #将地址绑定到套接字上
tcpSerSocket.listen(5)                        #设置并启动套接字监听

while True:               #无限循环,等待客户端连接
    print('waiting for connection...')      
    tcpCliSocket,addr = tcpSerSocket.accept()        #被动接受客户端连接          
    print('...connected from:',addr)

    while True:            #对话循环,等待客户端发送消息
        data = tcpCliSocket.recv(BUFSIZ)     #接收客户端消息
        if not data:          #如果消息是空白,跳出对话循环,关闭当前连接
            break
        tcpCliSocket.send(data)      #如果收到消息,将消息原封不动返回客户端

    tcpCliSocket.close()
tcpSerSocket.close()

创建 TCP 客户端

同上边一样,一个简单的非代码流程

        cs = socket()        #创建客户端套接字
        cs.connect()          #尝试连接服务器
        comm_loop:          #通信循环
                cs.send()/cs.recv()    #对话(发送/接收)
        cs.close()             #关闭客户端套接字  

实际中创建客户端也是翻译上边的步骤

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'       #服务器的主机名
PORT = 21571          #端口号
BUFSIZ = 1024         #缓冲区
ADDR = (HOST,PORT)     #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)    #创建客户端套接字
tcpCliSocket.connect(ADDR)          #连接服务器

while True:                #通信循环
    data = input('> ')       #客户端输入信息
    if not data:     #如果输入信息为空,则跳出循环,关闭通信
        break

    data = str.encode(data)           
    tcpCliSocket.send(data)     #发送客户端信息
    data = tcpCliSocket.recv(BUFSIZ)     #接受服务器返回信息
    if not data:        #如果服务器未返回信息,关闭通信循环
        break
    print('get:',data.decode('utf-8'))

tcpCliSocket.close()

当然,这只是最基础的通信,而且关于主机名,端口号之类的东西暂时还不是很懂,目前所做的只是在同一台电脑上通信,端口号也需要一致,如果不同的电脑进行通信该怎么做?我还只是个小白.....

相关文章

  • 31.Python之网络编程(socket模块)

    Python之网络编程(socket模块) 什么是socket?Socket是应用层与TCP / IP协议族通信的...

  • (19) 网络编程

    Python进行网络编程,就是在Python程序本身这个进程内,连接别的服务器进程的通信端口进行通信。 TCP/I...

  • Python网络编程,TCP/IP服务器与客户端通信

    初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书...

  • 了解一些关于HTTP与HTTPS协议的知识

    HTTP(超文本传输协议),HTTP就是通过TCP/IP协议建立连接,实现服务器和客户端之间的通信。TCP/IP协...

  • Android网络编程

    Android网络编程 基于TCP协议的网络通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一...

  • 你需要知道的TCP/IP

    前言 TCP/IP 协议 是网络通信的基石,TCP/IP 协议 不是只有 TCP 和 IP 协议,它是整个网络通信...

  • Go网络编程HTTP

    http编程 Web服务器的工作原理可以简单归纳为客户端通过TCP/IP协议建立到服务器的TCP连接客户端向服务器...

  • Python学习23-socket编程

    查看所有Python相关学习笔记 socket编程 应用使用socket编程接口来通过TCP/IP协议进行通信 网...

  • 网络基础 TCP/IP

    目录 • TCP/IP 分层管理• TCP/IP 通信传输流 协议: 计算机与网络设备进行通信的规则(如何...

  • python学习笔记3

    Python网络编程 TCP面向连接的通信方式,UDP与TCP不同,与虚拟电路完全相反,是数据报型的无连接套接字。...

网友评论

    本文标题:Python网络编程,TCP/IP服务器与客户端通信

    本文链接:https://www.haomeiwen.com/subject/vavuvttx.html