python实现tcp通信以及静态服务器

python实现tcp通信以及静态服务器

前言:python中的socket模块详看前面的博客:socket模块介绍以及UDP通信实现

tcp客户端实例

'''tcp客户端'''
import socket

if __name__ == '__main__':
    # 1.套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2.创建链接
    tcp_socket.connect(('10.10.24.100', 8080))
    # 3.发送信息
    while True:
        send_str = input('输入')
        tcp_socket.send(send_str.encode('utf-8'))

        ret = tcp_socket.recv(1024)
        print(ret.decode('utf-8'))
    # 4.关闭 
    tcp_socket.close()

tcp服务端实例

'''这是tcp服务端
1.创建socket套接字
2.需要使用bind绑定端口
3.listen监听模式,等待接收用户的链接,
使得套接字变成被动状态,会阻塞进程
4.accept接收客户端的数据并处理
'''
import socket
import threading

tcp_socket = None
client_sockets = []  # 放每个客户端的socket


# 这是接收客户端传过来的信息并确认的函数
def exchange():
    while True:
        for sock in client_sockets:
            try:
                # 如果接收到一个长度为0的数据,说明对方主动关闭了
                data = sock.recv(1024).decode('utf-8')
                print(data)
                sock.send('服务端已经收到信息'.encode('utf-8'))
            except Exception as e:
                print(e)
            if not data:
                client_sockets.remove(sock)
                sock.close()


if __name__ == '__main__':
    # 1.套接字
    # global tcp_socket
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 立即回收端口
    tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 2.创建链接,绑定端口
    tcp_socket.bind(('', 9700))
    # 3.监听模式
    tcp_socket.listen(5)
    # # 4.accept接收 返回一个元祖,第一个参数是新的套接字处理用户,第二个是用户地址信息
    # service_client_socket, client_addressinfo = tcp_socket.accept()
    # 创建并启动线程
    thread_client = threading.Thread(target=exchange)
    thread_client.start()

    while True:
        service_client_socket, client_addressinfo = tcp_socket.accept()
        if service_client_socket:
            print('客户端连接地址为;', client_addressinfo)
        # service_client_socket.setblocking(0)  # 防止堵塞
        client_sockets.append(service_client_socket)  # 添加进客户服务的列表

tcp静态服务器实例

import socket
'''这个程序实现的是静态服务器'''

if __name__ == '__main__':
    "'主函数实现逻辑'"
    # 创建服务端socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    server_socket.bind(('', 9090))  # 绑定端口
    # 监听
    server_socket.listen()
    # 取出服务socket
    handler_socket, address_info = server_socket.accept()
    # 打印get请求内容
    data = handler_socket.recv(1024)
    # 这是分割返回的字符串
    request_data = data.splitlines()
    for i in request_data:
        print(i)
    # print(data.decode('utf-8'))
    # 响应头
    response_header = 'HTTP/1.1 200 ok\r\n'
    response_header += '\r\n'
    response_body = 'hello world'
    response = response_header + response_body
    # 浏览器访问地址http://localhost:9090/即可得到内容
    handler_socket.send(response.encode('utf-8'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值