最新下载
热门教程
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 - 9
 - 10
 
Python中socket网络编程TCP/IP服务器与客户端通信的教程
时间:2022-11-14 23:00:35 编辑:袖梨 来源:一聚教程网
Python socket网络编程
初学 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 -*- 
            fromsocketimport*     #将 socket 属性引入到命名空间 
            HOST=''         #这是对 bind()方法的标识表示可以使用任何可用的地址 
            PORT=21571     #端口号 
            BUFSIZ=1024    #缓冲区大小,1kb 
            ADDR=(HOST,PORT)  #地址???? 
            tcpSerSocket=socket(AF_INET,SOCK_STREAM)   #创建 tcp 套接字 
            tcpSerSocket.bind(ADDR)          #将地址绑定到套接字上 
            tcpSerSocket.listen(5)           #设置并启动套接字监听 
            whileTrue:       #无限循环,等待客户端连接 
              print('waiting for connection...')   
              tcpCliSocket,addr=tcpSerSocket.accept()   #被动接受客户端连接     
              print('...connected from:',addr) 
              whileTrue:     #对话循环,等待客户端发送消息 
                data=tcpCliSocket.recv(BUFSIZ)  #接收客户端消息 
                ifnotdata:    #如果消息是空白,跳出对话循环,关闭当前连接 
                  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 -*- 
            fromsocketimport* 
            HOST='localhost'   #服务器的主机名 
            PORT=21571    #端口号 
            BUFSIZ=1024    #缓冲区 
            ADDR=(HOST,PORT)  #地址 
            tcpCliSocket=socket(AF_INET,SOCK_STREAM) #创建客户端套接字 
            tcpCliSocket.connect(ADDR)    #连接服务器 
            whileTrue:       #通信循环 
              data=input('> ')   #客户端输入信息 
              ifnotdata:  #如果输入信息为空,则跳出循环,关闭通信 
                break 
              data=str.encode(data)      
              tcpCliSocket.send(data)  #发送客户端信息 
              data=tcpCliSocket.recv(BUFSIZ)  #接受服务器返回信息 
              ifnotdata:   #如果服务器未返回信息,关闭通信循环 
                break 
              print('get:',data.decode('utf-8')) 
            tcpCliSocket.close() 
             | 
        
当然,这只是最基础的通信,而且关于主机名,端口号之类的东西暂时还不是很懂,目前所做的只是在同一台电脑上通信,端口号也需要一致,如果不同的电脑进行通信该怎么做?我还只是个小白.....
相关文章
- 二重螺旋金色魔灵怎么获得 金色魔灵获取攻略 11-04
 - 二重螺旋装备图纸怎么获得 装备图纸获取攻略 11-04
 - 2025年庆祝六一儿童节句子六一儿童节朋友圈文案(精选97句) 11-04
 - 二重螺旋输出角色怎么选 输出角色选择推荐 11-04
 - 二重螺旋妮弗尔夫人魔之楔怎么配-妮弗尔夫人魔之楔搭配推荐 11-04
 - 二重螺旋千面歌者的忧郁任务怎么做 千面歌者的忧郁任务流程攻略 11-04