Socket实例

本文通过示例介绍了Python中使用socket进行单个连接通信的方法,包括客户端和服务端的基本实现流程,以及如何处理数据收发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、socket处理单个连接

recv方法不是可以随便接收多大的数据都可以。官方建议是8KB,  即conn.recv(8192)

import socket

client = socket.socket()
'''
等价于client = socket.socket(family=socket.AF_INET, type=socket.SOCKET_STREAM)
'''
client.connect(('localhost', 6969))
client.send(b"hello, server")

data = client.recv(1024)
print('收到服务器返回数据:', data)

client.close()

#######################################
#
# 收到服务器返回数据: b'HELLO, SERVER'
#
#######################################
客户端代码
import socket

server = socket.socket()
server.bind(("localhost", 6969))
server.listen()    # 开始监听

one_person, one_address = server.accept()
data = one_person.recv(1024)
print('收到客户端数据:', data)
one_person.send(data.upper())

server.close()

#######################################
#
# 收到客户端数据: b'hello, server'
#
#######################################
服务器端代码

区别:客户端和服务器连接一通电话,来回通话,如果客户端断开 Windows里服务器端也断开“远程主机关闭了一个现有连接”  Linux里服务器会进入死循环,不停接收到空字符

注意:不能send空字符。如果send空字符服务器端会卡住,因为此时服务器端还在等待接收数据。 

二、socket处理单个连接,端口后可以用别的连接启动,客户端输入exit退出

import socket

client = socket.socket()
client.connect(('127.0.0.1', 6969))
while True:
    data = input(">>").strip()
    client.send(data.encode('utf-8'))
    if data.lower() == 'exit':
        break
    print(client.recv(1024).decode("utf-8"))

client.close()
客户端代码
import socket

server = socket.socket()
server.bind(('0.0.0.0', 6969))
server.listen()

##############################
while True:
    first_client, first_address = server.accept()
    while True:
        data = first_client.recv(1024)
        print(first_address, data)
        if data.decode("utf-8").lower() == 'exit':
            print("client is lost..")
            break
        first_client.send(data.upper())
##############################
服务器端代码

 

posted on 2018-08-23 00:16 要一直走下去 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/staff/p/9521273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值