(新手)python的tcp(简单tcp服务端、客户端 ;多线程的tcp服务端)

tcp的三次握手四次挥手时序:
这里写图片描述
1简单tcp客户端,实现一个最简单最简陋的客户端:

# tcp客户端

from socket import *

# 1创建套接字
tcp_socket = socket(AF_INET,SOCK_STREAM)

# 2绑定端口
ip = input('请输入要连接服务器ip:')
port = int(input('请输入要连接服务器端口:'))

# 3连接服务器
tcp_socket.connect((ip,port))

# 4发送接收数据
send_data = input('请输入要传送数据:')
send_data = send_data.encode('utf-8')
tcp_socket.send(send_data)

recv_data = tcp_socket.recv(1024)
recv_data = recv_data.decode('utf-8')
print(recv_data)

# 5关闭套接字
tcp_socket.close()

2简单tcp服务端,实现一个最简单最简陋的服务端:

# 1创建套接字
import socket
tcp_socket_host = socket.socket(socket.AF_INET,socket.SOCK_STREAM)


# 服务器端口回收操作(释放端口)
tcp_socket_host.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)

# 2绑定端口
tcp_socket_host.bind(('',8080))

# 3监听  变为被动套接字
tcp_socket_host.listen(128)    #128可以监听的最大数量,最大链接数

# 4等待客户端连接
socket_fuwu,addr_client=tcp_socket_host.accept()  #accept(new_socket,addr)
print(socket_fuwu)
print(addr_client)
# 5读写

recv_data = socket_fuwu.recv(1024)
print(recv_data.decode('utf-8'))

seng_data = '你是好人'
socket_fuwu.send(seng_data.encode('utf-8'))

#6服务套接字关闭
socket_fuwu.close()    #服务器一般不关闭

3多线程实现tcp服务端:

# 1创建套接字
import socket
import threading

def read(socket_fuwu):
    while True:

        recv_data = socket_fuwu.recv(1024)
        if recv_data:
            print('收到的信息:',recv_data.decode('gbk'))      #因为在window测试,所以使用gbk编码规则

def write(socket_fuwu):
    while True:

        seng_data = input('请输入要发送的:')
        if seng_data:
            socket_fuwu.send(seng_data.encode('gbk'))

def main():
    tcp_socket_host = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    # 服务器端口回收操作(释放端口)
    tcp_socket_host.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)

    # 2绑定端口
    tcp_socket_host.bind(('',8080))

    # 3监听  变为被动套接字
    tcp_socket_host.listen(128)    #128可以监听的最大数量,最大链接数

    # 4等待客户端连接
    socket_fuwu,addr_client=tcp_socket_host.accept()  #accept(new_socket,addr)
    print(socket_fuwu)
    print(addr_client)

    t1=threading.Thread(target=read,args=(socket_fuwu,))
    t2=threading.Thread(target=write,args=(socket_fuwu,))
    t1.start()
    t2.start()


    #6服务套接字关闭
    # socket_fuwu.close()    #服务器一般不关闭   此时服务端口因为需要一直执行所以也不能关闭


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/sui_yi123/article/details/81777520