1,在python中网络编程和linux平台下的c几乎差别不大,毕竟python的底层使用c实现的。在python中网络编程都是通过封装的socket模块实现,在下文中,通过代码来介绍对应的使用方法。
2>socket模块的tcp通信编程。

import socket

class TcpSer:
    def __init__(self,ip,port):
        self.ip_ = ip
        self.port_ = port
        self.addr_ = (self.ip_,self.port_)
        self.tcpSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    def Bind(self):
        self.tcpSock.bind(self.addr_)
  
    
    def Listen(self):
        Ret = self.tcpSock.listen(0)
        return Ret

    def Accept(self):
        sock,addr = self.tcpSock.accept()
        return (sock,addr)
    
    def Run(self):
        print('Waiting a client connect tcpser ...')
        recMsgSize = 1024
        while True:
            clisock,cliaddr = self.Accept()
            recMsg = clisock.recv(recMsgSize).decode('utf-8')
            print('Recv from %s message:%s' %(cliaddr,recMsg))
            clisock.send(recMsg.encode('utf-8'))
    
    def closeSock(self):
        self.tcpSock.close()

if __name__ == "__main__":
    try:
        ip = input('ip:')
        port = int(input('port:'))
        tcpser = TcpSer(ip,port)
        tcpser.Bind()
        tcpser.Listen()
        tcpser.Run()
    except KeyboardInterrupt:
        tcpser.closeSock()

client.py:
import socket
import time

ip = '192.1680.102'
port = 8000

addr = (ip,port)

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

cfd.connect(addr)

while True:
	try:
		message = input('>>>')
		cfd.send(message.encode('utf-8'))
	except:
		cfd.close()

以上是简单的tcp服务连接通信,tcp是面向连接,双方要想通信必须要进行连接,tcp通过内部通过三次握手进行具体的连接,并且在tcp通信过程中,可以确保数据的准确性,一般可以通过双方相互之间通过发送数据与接收确认数据包,来保证数据的传输.并且在tcp中,如果数据包过大,内核中会将数据包拆分开始进行发送,并且按照mtu大小进行发送,每个数据包都有序列号,以及校验和,目的是为了确保所有的数据包发送过去之后,另外一方通过将对应的序列号拿出来,重新拼接成一个完成的数据包,除此之外,tcp设置重传机制,数据包在传输的过程,可能会出现网络问题,再试数据包丢失,或者延时发送,重传机制就是为保证这个。具体的可根据实际情况,编写者,也可自己实现对应的确认包。以保证双方通信正常。在tcp传输过程遇到的最大的问题就是粘包问题,在实际编写代码通信的时候,可根据自定义相关的数据包,确定数据包的大小,双方进行相互约束,达成一致的标准,进行具体的分析,从而实现处理解决粘包问题。反观udp是非面向连接的,斌给udp每次发送的是一个完整的数据包体。应为非面向连接,所以不保证数据包一定发送至目标。编写者可根据实际情况,自行实现对应的两端包括机制,从而实现类似tcp重传的机制,确保数据发送至目标端。是否需要这样的机制,根据实际业务来决定即可。另外在tcp通信过程中,要避免出现大量的time_wait的连接等待,如果出现大量,可能会导致服务资源被占用消耗殆尽,其他的客户端可能就不能正常连接,具体的处理方法,请参考博主的其他博文有所接收。
3,在介绍下udp通信过程:

from socket import *
from time import ctime

host = '' #监听所有的ip
port = 13141 #接口必须一致
bufsize = 1024
addr = (host,port) 

udpServer = socket(AF_INET,SOCK_DGRAM)
udpServer.bind(addr) #开始监听

while True:
    print('Waiting for connection...')
    data,addr = udpServer.recvfrom(bufsize)  #接收数据和返回地址
    #处理数据
    data  = data.decode(encoding='utf-8').upper()
    data = "at %s :%s"%(ctime(),data)
    udpServer.sendto(data.encode(encoding='utf-8'),addr)
    #发送数据
    print('...recevied from and return to :',addr)

udpServer.close()

同样客户端可使用如上的客户端代码,去掉连接方法即可。
以上就是socket模块的tcp和udp通信过程,针对tcp代码下的接收,可参考博主的一片名字面试总结中的接收,了解其他的甚至地址重传,非阻塞的相关内容。如有哪里写的不好,欢迎指出,谢谢!