day26-socket(server和client通信)

# socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。它把复杂的TCP/IP协议隐藏到socket
#接口的后面,让socket去组织数据,以符合指定的协议。
# socket是一个模块,使用它来建立两个程序之间的连接和通信。也可以把socket看做是ip+port,因为ip标识
#互联网中一台主机的位置,而port标识这台主机上的一个应用程序,只要确立ip和port就可以找到一个应用程序,
#并且使用socket模块来与这个应用程序通信。

# 一、server服务端:
# 1.1
import socket
sk = socket.socket()         #买手机
sk.bind(('127.0.0.1',8080)) #绑定手机卡:sk.bind(('ip','port')),bind(元祖)
                                # 127.0.0.1是本机的回环地址,用于本机内部应用程序的通信。
sk.listen()             #监听,等待有人给我打电话
conn,addr = sk.accept() #接收到别人的电话,
                            # 得到了连接conn(connection),和别人的地址addr(address)

ret = conn.recv(1024)    #听别人说话,
                            # 接收1024个字节,如果接收更长的信息可以填写2048或其他更大的数字,recv(receive)接收
print(ret)
conn.send(b'hi,client')  #和别人说话,必须传一个bytes类型。
ret = conn.recv(1024)
print(ret.decode('utf-8'))#接收中文,编码为utf-8
conn.send(bytes('你也不错',encoding = 'utf-8')) #'你也不错'.encode('utf-8')

conn.close()        #挂电话
sk.close()          #关手机

# 1.2 不停跟client聊天,直到说bye才结束。
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8082))
sk.listen()
conn,addr = sk.accept()

while True:
    ret = conn.recv(1024).decode('utf-8')
    if ret == 'bye':
        print(ret)
        conn.send(b'bye')
        break
    print(ret)
    info = input('>>>')
    conn.send(bytes(info,encoding = 'utf-8'))

conn.close()
sk.close()


# 二、client客户端:
# 2.1
import socket
sk = socket.socket()           #买手机
sk.connect(('127.0.0.1',8080))#拨号,连接别人的地址和端口

sk.send(b'hello,server')     #和别人说话
ret = sk.recv(1024)           #听别人说话
print(ret)
sk.send(bytes('你很好',encoding = 'utf-8'))
ret = sk.recv(1024)
print(ret.decode('utf-8'))

sk.close()                    #关手机

# 2.2 不停跟server聊天,直到说bye才结束。
import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8082))

while True:
    info = input('>>>')
    sk.send(bytes(info,encoding = 'utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    if ret == 'bye':
        sk.send(b'bye')
        break
sk.close()

猜你喜欢

转载自www.cnblogs.com/python-daxiong/p/11325088.html