LFq51qqupnaiTNn39w6zATiOTxZI2JYuRJEBlzmUDv4zeeNlXhMgJZVb0q5QkLr+CIUrSuNB7ucifrGXawLB4qswPOXYG7+ItDNUR/9UkLTUWlnHLX07hnR1USOrWIjTmbytcIKEdaI6x0RskyotuItj84xxoSBP/iRBW2EHpOc

Socket对象方法:
服务端:

函数

描述

.bind()

绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port))

.listen()

监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可

.accept()

被动接受TCP客户端的连接

客户端:

函数

描述

.connect()

初始化服务器连接

.connect_ex()

是对connect()函数的扩展,当出错时返回出错码,不报异常

其它函数:

函数

描述

.recv()

接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。

.send()

发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码

.senddall()

发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。

.recvfrom()

与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。

.sendto()

发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。

.close()

关闭套接字

服务端

使用socket函数来创建一个socket对象,并设置一个socket服务,然后通过bind(hostname,port)函数来指定一个端口,使用socket对象的accept方法,等待客户端的连接,并返回connection对象。
具体步骤为


from socketserver import BaseRequestHandler, TCPServer
import socket
from socket import *
import time
import sys
def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass

    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError, ValueError):
        pass

    return False
class test(BaseRequestHandler):

    def handle(self):
        # self.client_address连接的客户端
        print('Got connection from', self.client_address)
        # 获取客服端请求
        msg = (self.request.recv(16)).decode('gbk')
        print(msg)
        while True:
            if is_number(msg) is True:
                if 1==int(msg):
                    remsg = bytes('bind()和connect()函数:绑定套接字并建立连接', encoding='gbk')
                    print('bind()和connect()函数:绑定套接字并建立连接')
                    self.request.send(remsg)
                    break
                elif 2==int(msg):
                    remsg = bytes('.listen()   监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可', encoding='gbk')
                    print('.listen()   监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可')
                    self.request.send(remsg)
                    break
                elif 3 == int(msg):
                    remsg = bytes('.accept()   被动接受TCP客户端的连接', encoding='gbk')
                    print('.accept()   被动接受TCP客户端的连接')
                    self.request.send(remsg)
                    break
                elif 4 == int(msg):
                    remsg = bytes('函数  描述.connect()   初始化服务器连接', encoding='gbk')
                    print('函数  描述.connect()   初始化服务器连接')
                    self.request.send(remsg)
                    break
                elif 5 == int(msg):
                    remsg = bytes('.send() 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码', encoding='gbk')
                    print('.send() 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码')
                    self.request.send(remsg)
                    break
                elif 6 == int(msg):
                    remsg = bytes('.close()    关闭套接字', encoding='gbk')
                    print('.close()    关闭套接字')
                    self.request.send(remsg)
                    break
                else:
                    remsg = bytes('不在范围内', encoding='gbk')
                    print('不在范围内')
                    self.request.send(remsg)
                    break
            elif msg == '我想要年薪百万':
                remsg = bytes('%s付出别人几倍的辛苦就可以年薪百万'%time.strftime("%Y-%m-%d %H:%M:%S"), encoding='gbk')
                print('%s付出别人几倍的辛苦就可以年薪百万'%time.strftime("%Y-%m-%d %H:%M:%S"))
                self.request.send(remsg)
                break
            elif b'aaa' == msg:
                remsg = bytes('%saaaaaaaa'%time.strftime("%Y-%m-%d %H:%M:%S"), encoding='gbk')
                print('%saaaaaaaa'%time.strftime("%Y-%m-%d %H:%M:%S"))
                self.request.send(remsg)
                break
            elif 'exit' == msg:
                remsg1 = bytes('%s结束连接'%time.strftime("%Y-%m-%d %H:%M:%S"), encoding='gbk')
                self.request.sendall(remsg1)
                print('%s结束连接'%time.strftime("%Y-%m-%d %H:%M:%S"))
                break
            else:
                remsg = bytes('呜呜呜呜呜呜呜呜无无无无无无无无无无无无', encoding='gbk')
                print('呜呜呜呜呜呜呜呜无无无无无无无无无无无无')
                self.request.send(remsg)
                break



if __name__ == '__main__':
    from threading import Thread
    # 绑定socket服务端所在ip和端口号
    serv = TCPServer(('127.0.0.1', 20003), test)
    serv.serve_forever()


连接服务器python解释器一直传输 python与服务器交互数据_网络

客户端

创建一个客户端用来连接以上服务的的服务,使用socket.connect()方法打开一个TCP连接到主机,连接后可以从服务端获取数据,在操作完成后关闭连接。 具体步骤为: ``` 创建客户端的套接字 client=socket() 尝试连接服务器 client.connect() 发送并接收数据 client.send() client.recv() 关闭客户端套接字 client.close() ``` **具体代码实现:**


from socket import socket,AF_INET,SOCK_STREAM

#服务端的ip地址
server_ip = '127.0.0.1'
#服务端socket绑定的端口号
server_port = 20003

if __name__ == '__main__':
    while True:
        str_msg = input("请输入要发送信息:")
        if str_msg != "":
            bytes_msg = bytes(str_msg, encoding = "gbk")
            client = socket(AF_INET,SOCK_STREAM)
            print(client)
            client.connect((server_ip,server_port))
            client.send(bytes_msg)
            print(str(client.recv(8192),encoding="gbk"))
            client.close()


连接服务器python解释器一直传输 python与服务器交互数据_udp_02

 客户端发送信息是服务端设置的返回信息

连接服务器python解释器一直传输 python与服务器交互数据_udp_03