python-17-socket

198 阅读1分钟

socket

Socket是应用层与TCP/IP协议中通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

服务端

import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',8030))
phone.listen(5)

conn,addr = phone.accept()
#收消息
msg = conn.recv(1024)
print('客户端发来的消息是',msg)
#发消息
conn.send(msg.upper())
conn.close()
phone.close()

客户端

import socket
phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8030))#拨通电话
phone.send('hello'.encode('utf-8'))
data = phone.recv(1024)
print('收到服务端收到的消息',data)

服务端1

from socket import *
ip_port =('127.0.0.1',9000)
back_log = 5
buffer_size=1024
tcp_server = socket(AF_INET,SOCK_STREAM)
tcp_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
print('服务端开始运行了')

while True:
    conn,addr = tcp_server.accept()
    print('双向连接是',conn)
    print('客户端地址',addr)

    while True:
        try:
            data = conn.recv(buffer_size)
            print('客户端发来的消息是', data.decode('utf-8'))
            conn.send(data.upper())
        except Exception:
            break
    conn.close()

tcp_server.close()

客户端1

from socket import *
ip_port =('127.0.0.1',9000)
back_log = 5
buffer_size=1024
tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
    msg=input('>>:').strip()
    #如果为空重新输入
    if not msg:continue
    tcp_client.send(msg.encode('utf-8'))
    print('客户端已经发送消息')
    data = tcp_client.recv(buffer_size)
    print('收到服务端发来的消息',data.decode('utf-8'))

tcp_client.close()