Home >Backend Development >Python Tutorial >Python socket network programming TCP/IP server and client communication

Python socket network programming TCP/IP server and client communication

高洛峰
高洛峰Original
2017-02-23 16:33:582009browse

Python socket network programming

I am new to python. I bought two books some time ago, "Python Programming from Introduction to Practice" and "Python Core Programming Third Edition", Vol. One book mainly talks about some basic syntax and some basic usage methods, while the second book is much more in-depth. I think I have only a little understanding of it. I happened to see this part of network programming, and there are still many things I don’t understand. But thinking about it Through your own continuous exploration and continuous search for information and learning, you should become more transparent sooner or later...

The main module used in this part is the socket module, and you can find the socket in this module () function, which is used to create socket objects. Sockets also have their own set of methods, which can implement socket-based network communication.

socket() module function

To create a socket, you must use the socket.socket() function. Its general syntax is as follows

socket(socket_family, socket_type, protocol=0)

Where socket_family is AF_UNIX or AF_INET, socket_type is SOCK_STREAM or SOCK_DGRAM, protocol is usually omitted, default=0.

So create a TCP/IP socket , you can use the following method to call socket.socket().

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

Similarly create a UDP/IP socket, use the following method to call

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

Create TCP server

The process of creating TCP server is basically as follows, it is not the real code

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

The actual basic process of creating a TCP server is as mentioned above. It may be slightly different but the basic ideas should be the same. The following is the code of the actual server:

#!/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()

Create TCP client

Same as above, a simple non-code process

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

In fact, creating a client is also the translation of the above steps

#!/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()

Of course, this is just the most basic Basic communication, and I still don’t know much about things like host name, port number, etc. What I am currently doing is communicating on the same computer, and the port number also needs to be the same. What should I do if different computers communicate? I'm just a novice...

Thank you for reading, I hope it can help everyone, thank you for your support of this site!

For more articles related to Python socket network programming TCP/IP server and client communication, please pay attention to the PHP Chinese website!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn