python-- socket_tcp

socket 是服务端和客户端进行通信的,我们先来写一个服务端

服务端

import socket

server = socket.socket()  # 声明类型
server.bind(('localhost', 8888))  # 绑定ip地址和端口,是个元组
server.listen()  # 开始监听
conn, addr = server.accept()  # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址在这里等数据发送过来
print(conn, addr)
data = conn.recv(1024)  # 接收数据
print('recv:', data)
conn.send(data.upper())  # 将接收的数据变大写返回给
conn.close()
server.close()

客户端

import socket

client = socket.socket()  # 声明协议类型,默认ipv4,http。同时生成socket连接对象
client.connect(('localhost', 8888))  # 连接服务器的ip    和端口,以元组的形式
client.send(b'hello world!')  # 发数据,要以字节发送
data = client.recv(1024)  # 接收数据
print('recv:', data)
client.close()

这样服务端和客户端就都写好了,先来启动服务端,在来启动客户端,查看控制台

服务端打印的数据如下

<socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8888), raddr=('127.0.0.1', 56520)> ('127.0.0.1', 56520)
recv: b'hello world!'

客户端打印的数据如下

recv: b'HELLO WORLD!'

接受中文

服务端

import socket

server = socket.socket()  # 声明类型
server.bind(('localhost', 8888))  # 绑定ip地址和端口
server.listen()  # 开始监听
conn, addr = server.accept()  # conn就是客户端连过来而在服务器端为其生成的一个连接实例,addr是他的地址
data = conn.recv(1024)  # 接收数据
print('recv:', data.decode())
conn.send(data.upper())  # 将接收的数据变大写返回给
server.close()

客户端

import socket

client = socket.socket()  # 声明协议类型,默认ipv4,http。同时生成socket连接对象
client.connect(('localhost', 8888))  # 绑定ip地址和端口,以元组的形式
client.send('我爱北京天安门'.encode('utf-8'))  # 发数据有汉字加encode('utf-8')
data = client.recv(1024)  # 接收数据
print('recv:', data.decode())
client.close()

服务端打印的数据如下

recv: 我爱北京天安门

客户端打印的数据如下

recv: 我爱北京天安门

和客户端连续通信

服务端

import socket

server = socket.socket()
server.bind(('localhost', 8888))
server.listen()
conn, addr = server.accept()  # 放到while里面就卡住了, 因为和一个通完一句话之后,会等另一个连接
while True:
    data = conn.recv(1024)  # 接收数据
    if not data:  # 判断接收的数据为空就断开
        break
    print('recv:', data.decode())
    conn.send(data.upper())

客户端

import socket

client = socket.socket()
client.connect(('localhost', 8888))
while True:
    msg = input('>>').strip()
    client.send(msg.encode('utf-8'))
    data = client.recv(1024)  # 接收数据
    print('recv:', data.decode())

方法二

服务端

import socket

server = socket.socket()
server.bind(('localhost', 6969))  # 绑定要监听端口
server.listen(5)  # 监听
print("我要开始等电话了")
while True:
    conn, addr = server.accept()  # 等电话打进来
    print("电话来了")
    while True:
        data = conn.recv(1024)
        print("recv:", data.decode())
        if not data:  # 客户端断开后返回上个while继续等
            print("client has lost...")
            break
        conn.send(data.upper())

server.close()

客户端

import socket

client = socket.socket()
client.connect(('localhost', 6969))
while True:
    msg = input(">>:").strip()
    if len(msg) == 0:  # 输入的为空
        continue
    client.send(msg.encode("utf-8"))
    data = client.recv(10240)
    print("recv:", data.decode())
client.close()

 

posted @ 2021-05-30 21:59  邹邹很busy。  阅读(62)  评论(0编辑  收藏  举报