s.recv(1024)
时间: 2023-12-18 07:12:41 浏览: 26
这段代码是用于从socket连接中接收数据的。其中,s是一个已经建立好的socket连接对象。recv()方法的参数是希望一次接收的数据的最大字节数。该方法会阻塞当前线程,直到接收到数据或者连接被关闭。如果返回的结果为空,则说明连接已经被关闭。如果接收到的数据量大于指定的最大字节数,则只会返回指定字节数的数据。
相关问题
将下列代码用进程或线程的方式改写while True: print('等待客户连接...\r\n'); cs,caddr=ss.accept() print('连接来自于:',caddr) data='欢迎你的到来!\r\n' cs.sendall(bytes(data,'utf-8')) data=cs.recv(1024).decode('utf-8') if not data: break print('三角形三边长为:',data) sides=data.split(',') cs.sendall(bytes(''+str(triangle(float(sides[0]), float(sides[1]),float(sides[2]))),'utf-8')) cs.close() ss.close() from socket import * s=socket(AF_INET,SOCK_STREAM,0) s.connect(('127.0.0.1',5005)) data=s.recv(1024).decode('utf-8') if data: print(data) a=input("请输入边长a:") b=input("请输入边长b:") c=input("请输入边长c:") data=a+','+b+','+c if data: s.sendall(bytes(data,'utf-8')) data=s.recv(1024).decode('utf-8') if data: print('三角形面积为:',data) s.close()
使用线程方式改写:
```python
import threading
from socket import *
def handle_client(cs):
print('连接来自于:', cs.getpeername())
data = '欢迎你的到来!\r\n'
cs.sendall(bytes(data, 'utf-8'))
data = cs.recv(1024).decode('utf-8')
if not data:
return
print('三角形三边长为:', data)
sides = data.split(',')
cs.sendall(bytes('' + str(triangle(float(sides[0]), float(sides[1]), float(sides[2]))), 'utf-8'))
cs.close()
def client_thread():
s = socket(AF_INET, SOCK_STREAM, 0)
s.connect(('127.0.0.1', 5005))
data = s.recv(1024).decode('utf-8')
if data:
print(data)
a = input("请输入边长a:")
b = input("请输入边长b:")
c = input("请输入边长c:")
data = a + ',' + b + ',' + c
if data:
s.sendall(bytes(data, 'utf-8'))
data = s.recv(1024).decode('utf-8')
if data:
print('三角形面积为:', data)
s.close()
ss = socket(AF_INET, SOCK_STREAM, 0)
ss.bind(('127.0.0.1', 5005))
ss.listen(5)
print('等待客户连接...\r\n')
while True:
cs, caddr = ss.accept()
thread = threading.Thread(target=handle_client, args=(cs,))
thread.start()
client_thread()
```
使用进程方式改写:
```python
import multiprocessing
from socket import *
def handle_client(cs):
print('连接来自于:', cs.getpeername())
data = '欢迎你的到来!\r\n'
cs.sendall(bytes(data, 'utf-8'))
data = cs.recv(1024).decode('utf-8')
if not data:
return
print('三角形三边长为:', data)
sides = data.split(',')
cs.sendall(bytes('' + str(triangle(float(sides[0]), float(sides[1]), float(sides[2]))), 'utf-8'))
cs.close()
def client_process():
s = socket(AF_INET, SOCK_STREAM, 0)
s.connect(('127.0.0.1', 5005))
data = s.recv(1024).decode('utf-8')
if data:
print(data)
a = input("请输入边长a:")
b = input("请输入边长b:")
c = input("请输入边长c:")
data = a + ',' + b + ',' + c
if data:
s.sendall(bytes(data, 'utf-8'))
data = s.recv(1024).decode('utf-8')
if data:
print('三角形面积为:', data)
s.close()
ss = socket(AF_INET, SOCK_STREAM, 0)
ss.bind(('127.0.0.1', 5005))
ss.listen(5)
print('等待客户连接...\r\n')
while True:
cs, caddr = ss.accept()
process = multiprocessing.Process(target=handle_client, args=(cs,))
process.start()
client_process()
```
while True: #消息主循环 data = s.recv(1024) data = data.decode() msg = data.split(':;') if len(msg) == 1: # 是用户列表消息 data = json.loads(data) # 还原为列表对象 请完善接收用户列表消息和用户好友列表消息
当接收到用户列表消息和用户好友列表消息时,可以按照以下方式进行处理:
1. 接收用户列表消息:
```python
if len(msg) == 1 and msg[0] == 'userlist': # 是用户列表消息
data = s.recv(1024)
data = data.decode()
user_list = json.loads(data) # 还原为列表对象,存储所有在线用户的用户名
```
2. 接收用户好友列表消息:
```python
if len(msg) == 1 and msg[0] == 'friendlist': # 是用户好友列表消息
data = s.recv(1024)
data = data.decode()
friend_list = json.loads(data) # 还原为列表对象,存储当前用户的好友列表
```
其中,`user_list` 和 `friend_list` 都是列表对象,可以根据需要进行处理或展示。