Tôi đã viết một ứng dụng ứng dụng ổ cắm đơn giản để đọc dữ liệu trong Python 3.4
Vấn đề tôi đang gặp phải là khi máy chủ gửi một lượng nhỏ dữ liệu (khoảng 1000) byte, nó sẽ đọc nó một cách hoàn hảo nhưng khi một khối dữ liệu lớn được xử lý xung quanh (____6 byte) Chunk dữ liệu (như 1100-ish khối). Tôi dường như không thể tìm ra lý do tại sao nó hoạt động thất thường khi xử lý lượng dữ liệu khổng lồ. Tôi biết rằng dữ liệu của tôi không lớn hơn ssize_t tối đa là 32767.
Nó hoạt động hoàn hảo khi xử lý dữ liệu nhỏ và hoàn toàn biến 180 và hoạt động khác nhau khi xử lý một lượng dữ liệu khổng lồ. Tôi biết rằng đây không phải là vấn đề trong máy chủ TCP vì tôi đã thử nghiệm nó với máy khách PHP TCP và nó hoạt động hoàn hảo khi xử lý lượng dữ liệu khổng lồ.
Bất kỳ trợ giúp nào cũng được đánh giá rất cao.
import socket import json # Written in Python 3.4. class SocketClient: def __init__(self, host, port, format, timeout = None): # Constructor self.host = host self.port = port self.format = format self.timeout = timeout self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def send(self, firstname, lastname, parameters = [], format = 'json'): if self.socket is not None: self.socket.connect((self.host, self.port)) data = {} data['firstname'] = firstname data['lastname'] = lastname data['parameters'] = parameters data['format'] = format self.socket.send(bytes(json.dumps(data), "utf-8")) result = self.socket.recv(32767) result = result.decode() return result def shutdown(self): if socket is not None: self.socket.shutdown(socket.SHUT_RDWR) self.socket.close() if __name__ == __main__: client = SocketClient("127.0.0.1", 8080, 'json') response = client.send('foo', 'bar', ['foobar']) print(response) client.shutdown()Xếp hạng chủ đề:
- 0 Bầu chọn - trung bình 0
- 1
- 2
- 3
- 4
- 5
Byte đầu tiên bị thiếu trong khi nhận dữ liệu qua ổ cắm TCP |
Kính gửi tất cả bạn bè. Tôi đang cố gắng liên lạc với máy chủ IEC-60870-5-104 thông qua các ổ cắm TCP. Máy chủ IEC được đặt trên máy chủ cục bộ 127.0.0.1: 2404 và tôi đang cố gắng gửi một tin nhắn hex với chức năng trợ giúp của send (). Vui lòng xem mã của tôi Bây giờ khi tôi chạy mã, nó kết nối thành công với máy chủ, gửi thông báo hex là 0x68 0x04 0x07 0x00 0x00 0x00 Đáp lại, nó nhận được thông báo Hex 0x68 0x04 0x0B 0x00 0x00 0x00 Tôi đã xác nhận điều này với Wireshark nhưng những gì tôi tìm thấy trên shell của mình là ====== .py ======== Ổ cắm thành công Dữ liệu đã tạo thành công: B'H \ x04 \ x0b \ x00 \ x00 \ x00 '>>> Chỉ có 5 byte được hiển thị, Byte đầu tiên 0x68 là đâu? Tôi phải nhận và hiển thị 0x68 0x04 0x0B 0x00 0x00 0x00, có chuyện gì vậy? Xin vui lòng giúp đỡ
Bài viết: 11.45611,456 Chủ đề: 436436 Tham gia: Tháng 9 năm 2016Sep 2016 Danh tiếng: 442 442 Không chắc chắn, nhưng điều này có thể liên quan đến chuyển đổi lớn, endian nhỏ. Đây là một blog về chủ đề: //pythontic.com/modules/socket/byt...-cctions Bài viết: 1.8741,874 Chủ đề: 88 Tham gia: Tháng 5 năm 2017May 2017 Danh tiếng: 215 215 Tháng 11-19-2019, 05:33 PM (Bài đăng này được sửa đổi lần cuối: tháng 11-19-2019, 05:33 PM bởi Dead_eye.) (This post was last modified: Nov-19-2019, 05:33 PM by DeaD_EyE.) Tôi đếm 6 byte. Byte đầu tiên là #import the socket library
import socket
# create a socket object
s = socket.socket()
print("Socket successfully created")
# connect to the server on local computer, 2404 default port for IEC-104 Server
s.connect(('127.0.0.1', 2404))
# send a hex message in bytes
s.send(b'\x68\x04\x07\x00\x00\x00')
data = s.recv(1024)
s.close()
print( "received data:", data)0. Bạn có một máy tính và bạn đang sử dụng ngôn ngữ lập trình. Chỉ cần sử dụng #import the socket library
import socket
# create a socket object
s = socket.socket()
print("Socket successfully created")
# connect to the server on local computer, 2404 default port for IEC-104 Server
s.connect(('127.0.0.1', 2404))
# send a hex message in bytes
s.send(b'\x68\x04\x07\x00\x00\x00')
data = s.recv(1024)
s.close()
print( "received data:", data)1 để có được độ dài. Bức thư đầu tiên là ____10, là 104 trong ASCII và Unicode, là 0x68 trong Hex. Tất cả các ký tự ASCII có thể in trong #import the socket library
import socket
# create a socket object
s = socket.socket()
print("Socket successfully created")
# connect to the server on local computer, 2404 default port for IEC-104 Server
s.connect(('127.0.0.1', 2404))
# send a hex message in bytes
s.send(b'\x68\x04\x07\x00\x00\x00')
data = s.recv(1024)
s.close()
print( "received data:", data)3 được biểu diễn dưới dạng phiên bản có thể in chứ không phải với giá trị hex. Nếu bạn muốn đại diện cho #import the socket library
import socket
# create a socket object
s = socket.socket()
print("Socket successfully created")
# connect to the server on local computer, 2404 default port for IEC-104 Server
s.connect(('127.0.0.1', 2404))
# send a hex message in bytes
s.send(b'\x68\x04\x07\x00\x00\x00')
data = s.recv(1024)
s.close()
print( "received data:", data)3 dưới dạng chuỗi hex, bạn có thể sử dụng #import the socket library
import socket
# create a socket object
s = socket.socket()
print("Socket successfully created")
# connect to the server on local computer, 2404 default port for IEC-104 Server
s.connect(('127.0.0.1', 2404))
# send a hex message in bytes
s.send(b'\x68\x04\x07\x00\x00\x00')
data = s.recv(1024)
s.close()
print( "received data:", data)5 Output: 68 04 07 00 00 00 Gần như đã chết, nhưng quá lười biếng để chết: //sourceerver.info tất cả con người cùng nhau. Chúng ta không cần các chính trị gia! Bài viết: 22 Chủ đề: 11 Tham gia: tháng 11 năm 2019Nov 2019 Danh tiếng: 0 0 Ôi Chúa ơi, bây giờ tôi đã nhận được nó, về cơ bản là mã ASCII mà tôi đang nhận được. Cảm ơn bạn rât nhiêu. |
Có thể các chủ đề liên quan… | |||||
Chủ đề | Tác giả | Trả lời | Lượt xem | Bài cuối cùng | |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 2 | 572 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: paulyan |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 0 | 831 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: ilknurg |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 4 | 1,077 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: amdi40 |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 2 | 1,543 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: korenron |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 0 | 648 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: snippyro |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 6 | 2,297 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: Pedroski55 |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 12 | 7,427 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: tienttt |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 0 | 1,915 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: wood_6636 |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 8 | 28,722 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: karkas |
& nbsp; | SMA (AVG di chuyển đơn giản) không nhận được dữ liệu (giá cổ phiếu). | gdbengo | 4 | 2,919 | Jul-31-2022, 08:20 PM Bài cuối cùng: Paulyan Last Post: PythonNmap |