写一个类继承socket时遇到的问题(TCP)

主要为题出在服务器端的accept()函数,他返回两个参数,一个套接字和一个客户端的ip和端口组成的元组。

 

问题就出在这个套接字这里,我们继承了socket这个类,这个套接字创建的时候是通过socket创建的,

 

后面我们不可以直接使用它,因为它调用的方法都是socket的方法,所以我们只能将他作为参数,传来传去。

代码见下:

 

import socket


class My_socket(socket.socket):

    def __init__(self, encoding='utf-8'):
        self.encoding = encoding
        super(My_socket, self).__init__()


    def mysend(self, data):
        return super(My_socket, self).send(data.encode(self.encoding))

    def my_send(self, data, conn):
        return conn.send(data.encode(self.encoding))

    def myrecv(self, num):
        msg = super(My_socket, self).recv(num).decode(self.encoding)
        return msg

    def my_recv(self, buffersize, conn):
        msg = conn.recv(buffersize).decode(self.encoding)
        return msg

 

 

import my_TCP

sk = my_TCP.My_socket()

sk.bind(('127.0.0.1', 7084))

sk.listen(4)

while 1:

    conn, addr = sk.accept()
    print(conn, type(conn))

    while 1:

        res_s = sk.my_recv(1024, conn)

        print(res_s)

        if res_s == 'q':
            break

        res_f = input('>>>>>')

        sk.my_send(res_f, conn)

        if res_f == 'q':
            break

    conn.close()

sk.close()
server端

 

import my_TCP

sk = my_TCP.My_socket()

adress = ('127.0.0.1', 7084)

sk.connect(adress)

while 1:

    meg = input('>>>')

    sk.mysend(meg)

    if meg == 'q':
        break

    res_s = sk.myrecv(1024)

    if res_s == 'q':
        break

    print(res_s)

sk.close()
client端

 

posted @ 2018-03-14 14:55  小学弟-  阅读(220)  评论(0编辑  收藏  举报