【Python】socket套接字练习

话不多说,直接上练习代码

1.hostserver

import socket

HOST = 'localhost'
PORT = 12348 
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:  # 1.创建 socket 对象
    s.bind((HOST, PORT))  # 2.绑定端口号【绑定套接字:调用 bind(hostname, port) 函数来指定服务的 port(端口)】
    # 3. 设置最大连接数,超过后排队 【监听套接字:调用listen函数,指定最多允许多少个客户连接到服务器。它的值至少为1。
    # 收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。】
    s.listen(1)
    #  4.建立客户端连接【等待接受连接:调用 socket 对象的 accept 方法。该方法等待客户端的连接,并返回 connection 对象,表示已连接到客户端。
    #  socket会时入“waiting”状态,也就是处于阻塞状态。客户请求连接时,方法建立连接并返回服务器。】

    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            conn.send(b'2')
            # data = conn.recv(1024)

            # if not data:
            #     break
            # conn.sendall(data)


2. client

import socket
import time
from threading import Thread


class client:
    def __init__(self, ip, port):
        self.s = None
        self.ip = ip
        self.port = port

    def connect(self):
        while True:
            try:
                self.s = socket.socket()
                self.s.connect((self.ip, self.port))
            except Exception as e:
                print('connect error: %s' % e)
                time.sleep(5)
                continue
            else:
                print('connect success')
                thread = Thread(target=self.recv_msg())
                thread.setDaemon(True)
                thread.start()

    def recv_msg(self):
        while True:
            try:
                data = self.s.recv(65535)
                if not data or len(data) > 10:
                    break
                print(data.decode('utf-8'))
            except Exception as e:
                print(e)
                break
        self.connect()

    def send_msg(self):
        i = 0
        while True:
            try:
                self.s.send(b'3')
                i += 1
                if i > 10:
                    break
            except Exception as e:
                print(e)
                break


if __name__ == '__main__':
    client = client('localhost', 12348)
    client.connect()
    # client.send_msg()

总结

  1. 客户端实现了断开自动重连的功能。同理如需要,host也可以这样做
  2. 接收信息,和发送消息功能还需要进一步练习
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值