1、创建 TCP 服务器:

'''
此脚本创建一个TCP服务器,
他接受来自客户端的消息,
然后将消息加上时间戳前缀并发送回客户端
'''

#!/usr/bin/env python

from socket import *
from time import ctime

HOST = ''  #对bind()方法的标识
PORT = 21567 #端口号
BUFSIZ = 1024
ADDR = (HOST , PORT)

#套接字
#socket_family : 套接字家族
#第一种套接字是 UNIX ,其家族名字为 AF_UNIX ,是基于文件的套接字
#第二种套接字是基于网络的,其家族名字为 AF_INET ,或者地址家族:因特网。目前使用最广泛
#AF_INET 支持 IPV4  ;  AF_INET6 支持 IPV6
#TCP : 传输控制协议
#创建TCP套接字,必须使用 SOCK_STREAM 作为 套接字类型(socket_type)
#创建套接字的语法:socket(socket_family , socket_type , proyocol=0)

tcpSerSock = socket(AF_INET, SOCK_STREAM)  #创建服务器套接字
tcpSerSock.bind(ADDR)                       #套接字与地址绑定
tcpSerSock.listen(5)                        #监听连接

while True:   #服务器无限循环
    print('waiting for connection ...')
    tcpCliSock, addr = tcpSerSock.accept() #接受客户端连接
    #addr = tcpCliSock
    print('...connected from:', addr)

    while True:  #进入对话循环中等待客户端发送消息
        data = tcpCliSock.recv(BUFSIZ)       #接受对话
        # 如果消息是空白的,则意味着客户端已退出,此时跳出对话循环,并关闭客户端连接
        if not data:
            break
        tcpCliSock.send(('[%s] %s' % (ctime(), data.decode())).encode())    #发送对话

    tcpCliSock.close()    #关闭客户端套接字
tcpSerSock.close()      #关闭服务器套接字

2、创建 TCP 客户端:

'''
此脚本创建一个客户端,
它提示用户输入发送到服务器端的消息,
并接收从服务器端返回的添加了时间戳前缀的消息,
然后将结果返回给用户
'''

#!/usr/bin/env python

from socket import *

HOST = 'localhost' #主机名
PORT = 21567       #端口号
BUFSIZ = 1024
ADDR = (HOST, PORT)

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

while True:       #通信循环
    data = input('> ')
    if not data:  #用户没有输入,跳出循环
        break
    tcpCliSock.send(data.encode())  # 发送对话
    data = tcpCliSock.recv(BUFSIZ)  #接受对话
    if not data:   #服务器终止且对recv()调用失败,跳出循环
        break
    print(data.decode('utf-8'))

tcpCliSock.close() #关闭客户端套接字

3、代码中字符串的处理:

     关于发送对话的 send() 函数 ,里面的参数应该是字节型(bytes);

     输入函数input()返回值为字符型(str);

     print()函数的参数是字符型(str);

     python3中 字节型(bytes) 和 字符型(str) 的转换关系为:

                      

python django实现 TCP服务器 python建立tcp服务器_python3

 

     对照可以理解代码中字节型和字符型之间的转换。

    python2 和 python3 关于字节型和字符型之间的转换处理不太一样

     (开始的时候特迷,一直报错,好久才总算明白过来)

4、运行结果:
客户端:

                     

python django实现 TCP服务器 python建立tcp服务器_套接字_02

服务器端:

                     

python django实现 TCP服务器 python建立tcp服务器_网络编程_03