Socket.Receive 无法预知字节长度的数据接收

本文通过C#代码示例展示了如何从客户端接收数据。具体实现包括使用`clientSocket.Receive`方法读取字节数据,并将接收到的字节转换为ASCII字符串进行输出。

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

话不多说直接上代码:

string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
do
{
	bytes = clientSocket.Receive(recvBytes, recvBytes.Length, 0); //从客户端接受消息
	recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
} while (bytes == 1024);
Console.WriteLine("{0} 收到:{1}", clientSocket.RemoteEndPoint.ToString(), recvStr);

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(('localhost', 12345)) try: send_data = { "A5 5A", 1, 1, 1, 2, "0x0000", } def assemble_data(self, fun: int, send_addr: int, receive_addr: int, args) -> []: data_fun = int_to_u8(fun) data_bao = int_to_u8(1) data_bao_sum = int_to_u8(1) data_send_addr = int_to_u16_little(send_addr) data_receive_addr = int_to_u16_little(receive_addr) send_data = bytes(0) ret_data = [] for data in args: send_data = send_data + data if send_data is not None: # 数据长度 data_length = len(send_data) if data_length > self.size: # 需要分包 page_num = int(data_length / self.size) + (1 if data_length % self.size else 0) data_bao_sum = int_to_u8(page_num) for i in range(page_num): start = i * self.size end = (i + 1) * self.size data_bao = int_to_u8(i + 1) p_data = send_data[start:end] ret_data.append( self.genData(data_fun, data_bao, data_bao_sum, data_send_addr, data_receive_addr, p_data)) else: ret_data.append( self.genData(data_fun, data_bao, data_bao_sum, data_send_addr, data_receive_addr, send_data)) else: sd = frame_head + int_to_u16_little( lt) + data_fun + data_bao + data_bao_sum + data_send_addr + data_receive_addr ret_data.append(sd + self.crc16_calc(sd)) return ret_data def generate_crc16_table(poly=0x1021): table = [] for byte in range(256): crc = byte << 8 for _ in range(8): if crc & 0x8000: crc = (crc << 1) ^ poly else: crc <<= 1 crc &= 0xFFFF # 保持16位 table.append(crc) return table json_data = json.dumps(send_data) client_socket.sendall(json_data.encode('utf-8')) # 生成表 crc16_table = generate_crc16_table(0x1021) response = client_socket.recv(4096).decode('utf-8') print("回应:", response) finally: client_socket.close() 帮我看看这段代码,逻辑上有什么问题
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值