【python】socket通信

文章详细描述了如何用Python的socket库创建一个基础的TCP服务器,处理客户端连接,进行数据交换。客户端通过主动连接并发送消息来演示功能。
摘要由CSDN通过智能技术生成

服务器

server.py

import socket     #socket模块
import time       #时间模块
import threading  #线程模块

#定义一个函数用来进行具体的数据交互,由子线程调用.
def session(sock, addr):
    print('欢迎新 %s:%s...' % addr)
    sock.send(b'Welcome!')

    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data == b'quit':
            print('客户端已退出.')
            break
        else:
            # 将接收到的字节数据解码为字符串
            received_msg = data.decode('utf-8')
            print('客户端消息:', received_msg)

            # 发送数据给客户端
            response = '服务器收到消息:' + received_msg
            # 将字符串编码为字节数据后发送
            sock.sendall(response.encode('utf-8'))
            # sock.sendall("服务器收到消息")

    # 关闭连接
    sock.close()
    print('来自 %s:%s 的连接已关闭.' % addr)

#创建 socket 监听对象:
#创建 TCP socket
#创建一个socket套接字,该套接字还没有建立连接
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#监听端口
#绑定监听端口,localhost和127.0.0.11是本机之间的进程通信使用的
server.bind(('127.0.0.1',1234))
#如果是局域网中两台主机之间的通信,绑定监听端口时,这里必须填本机的IP,例如192.168.27.238
#server.bind(('192.168.27.238',6666))
#开始监听,并设置最大连接数
server.listen(5)
print('服务器正在等待客户的连接……')
# print(u'waiting for connect...')

while True:
    #等待连接,一旦有客户端连接后,返回一个建立了连接后的套接字和连接客户端的IP和端口元组
    #connect,(host,port)=server.accept()
    #print(u'the client %s:%s has connected.' %(host,port))
    # 接受一个新连接:
    sock, addr = server.accept()
    # 创建新线程来处理TCP连接:
    t = threading.Thread(target=session, args=(sock, addr))
    t.start()

客户端

client.py

# 导入socke模块
import socket
# 创建一个socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
# 主动去连接局域网内IP为127.0.0.1,端口为1234的进程
client.connect(('127.0.0.1', 1234))
# 接收欢迎消息:
print(client.recv(1024).decode('utf-8'))

for data in [b'Rose', b'Think', b'Babala']:
    # 发送数据:
    client.send(data)
    print(client.recv(1024).decode('utf-8'))

while True:
    #接受控制台的输入
    data=input('please input data:')
    #对数据进行编码格式转换,不然报错
    data=data.encode('utf-8')
    #如果输入quit则退出连接
    if data == b'quit':
        print(b'connect quit.')
        break
    else:
        #发送数据
        client.sendall(data)
        #接收服务端的反馈数据
        rec_data=client.recv(1024)
        #print(b'form server receive:' + rec_data)

# 发送数据告诉服务器退出连接
client.sendall(b'quit')
# client.send(b'exit')
client.close()
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bosenya12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值