要一直走下去

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、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  要一直走下去  阅读(147)  评论(0编辑  收藏  举报