Python tcp编程,TCP服务端和TCP客户端代码编写

Python网络编程
两种模式:
一种tcp可靠连接,能够保证数据不丢失
一种udp 不关心数据是否会丢失,在乎传输效率

TCP编程
一点:服务端
二点:客户端

客户端如何连接服务端,保证传输的数据可靠呢?
Python tcp编程,TCP服务端和TCP客户端代码编写_第1张图片

第一次握手:客户端发送报文,连接服务端
第二次握手:服务端发送报文,你可以连接
第三次握手:客户端发送确认报文,我真的要连接

服务端的编写:
java:socketServer(ip,port)
Python:socket.socket()

1、创建socket.socket()
2、绑定地址和端口号
3、监听客户端请求
4、接受客户端的请求,并为之开辟一个线程来处理它的业务逻辑
知识点:
socket 网络通信的基本知识

tcp的服务端和客户端的案例
服务端:

"""
1、创建 socket.socket()
2、绑定地址和端口号
3、监听客户端请求
4、接受客户端的请求,并为之开辟一个线程来处理他的业务逻辑。
"""
import socket
#一、创建socket.socket()
#下面讲的是family
#family         :地址族,也就是IP地址类型,常用的IP地址类型有两种:AF_INET,AF_INET6
#AF             :Address Family
#INET           :Inetnet的缩写
#AF_INET        :默认是IPv4
#AF_INET6       :IP6的缩写
#family=AF_INET,type=SOCK_STREAM,proto=0

#type:
#type是表示的数据传输的方式
#type=SOCK_STEAM        :面向连接传输方式,数据可以准去到达另外一台机器,如果数据丢失就会重发,效率相对比较低
#type=SOCK_DGRAM        :表示无连接的传输方式,计算机只管传输数据,不做数据校验,相对快。
#@@使用的是SOCK_DGRAM这种方式。

#proto:
#传输协议:一般都有TCP,UDP

#下面创建的是IPV4的服务
import threading
import time

def run(sock, addr):
    print(addr)
    sock.send("接收到消息,开始运行.....".encode('utf-8'))
    while True:
        data =sock.recv(1024)
        if data == b"":
            continue
        print("-----------服务端start--------")
        print(data.decode('utf-8'))
        print("-----------服务端end--------")
        value = data.decode('utf-8');
        #str转成bytes的两种方式
        #(1)直接通过str.encode("utf-8")的方式
        #(2)通过创建bytes("字符串")对象来得到比特数组
        sock.send((value+value).encode('utf-8'))

socket_server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

#二、绑定地址和端口号
socket_server.bind(("127.0.0.1",8888))

#三、监听客户端请求
socket_server.listen()

#四、接受客户端的请求,并为之开辟一个线程来处理它的业务逻辑
#不停的循环,问有没有请求
while True:
    #接收一个请求
    #sock    是网路通道   用来读写数据
    #addr    是客户端ip地址
    (sock,addr) = socket_server.accept()
    #创建线程
    thread = threading.Thread(target=run,name="线程",args= (sock, addr))
    #启动线程
    thread.start()

客户端:

"""
1、创建一个socket连接,得到一个client端
2、连接服务器 知道服务器的ip地址和端口号
3、获取数据,并打印出来
"""
import socket

#1、创建一个socket连接,得到一个client端
import time

socket_client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)

#2、连接服务器 知道服务器的ip地址和端口号
socket_client.connect(("127.0.0.1",8888))
data = socket_client.recv(1024)
# 将字节数组转换成 字符串的两种方式
# 1,在服务端发送数据的时候,可以将将字符串转成bytes
#(1):调用对象的 str.encode('utf-8')
#(2): bytes(value,encoding="utf-8")
# 2,在客户端接受数据的是,将bytes转成字符串
#(1)调用对象的 str.decode('utf-8')
#(2)str(data,encoding='utf-8')
print(data.decode("utf-8"))
print(str(data,encoding="utf-8"))

#发送数据到服务端,发过去之后,在tcp_server.py中又,重新发过来,在客户端又接收到
for item in ["aaaa","bbbbbbbbbbbbbb","ccccccccccccccc","发送一下数据"]:
    time.sleep(1)
    socket_client.send(item.encode("utf-8"))

while True:
    data = socket_client.recv(1024)
    if data == b"":
        continue
    print("-----------客户端start--------")
    print(data.decode("utf-8"))
    print("-----------客户端end----------")

右键运行服务端和客户端,运行结果是:
Python tcp编程,TCP服务端和TCP客户端代码编写_第2张图片

客户端代码:
Python tcp编程,TCP服务端和TCP客户端代码编写_第3张图片

你可能感兴趣的:(#,Python)