Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 First Byte of a string is missing while receiving data over TCP Socket
Dear All Friends.
I am trying to communicate with an IEC-60870-5-104 server through TCP sockets. The IEC server is located over the local host 2404 and I am trying to send a HEX message with the help of send() function. Please look at my code
#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(('', 2404))
# send a hex message in bytes

data = s.recv(1024)


print( "received data:", data)
Now when i run the code, it connects successfully with the server, Sends the HEX message which is
0x68 0x04 0x07 0x00 0x00 0x00

In response it receives the hex message 0x68 0x04 0x0B 0x00 0x00 0x00
I confirmed this with Wireshark but what I find on my shell is
======== RESTART: C:/Users/Shahrukh/Desktop/Python Coding/TCP ========
Socket successfully created
received data: b'h\x04\x0b\x00\x00\x00'
Only 5 bytes are shown, where is the 1st byte 0x68? I must receive and show 0x68 0x04 0x0B 0x00 0x00 0x00, whats wrong? Please help
Not sure, but this could be related to big endian, little endian conversion.
Here's a blog on the subject:
I count 6 bytes. The first byte is a h.
You have a computer and you're using a programming language.
Just use len(data) to get the length.

In [2]: hex(ord('h'))                                                                                                       
Out[2]: '0x68'
The first letter is a h, which is 104 in ascii and unicode, which is 0x68 in hex.

All printable ASCII characters in bytes are represented as printable version and not with the hex value.
If you want to represent the bytes as hex-string, you could use binascii.hexlify()

import binascii

data = b'\x68\x04\x07\x00\x00\x00'
hexstr = binascii.hexlify(data, ' ', 1).decode()
# yes, hexlify return bytes
# the decode step is ugly
68 04 07 00 00 00
newbieAuggie2019 likes this post
My code examples are always for Python >=3.6.0
Almost dead, but too lazy to die:
All humans together. We don't need politicians!
Oh My God, Now I got it, its basically the ascii codes which I am receiving. Thank you very very much.

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  'utf-8' codec can't decode byte 0xda in position 184: invalid continuation byte karkas 8 8,427 Feb-08-2020, 06:58 PM
Last Post: karkas
  Receiving XML exception from nmap.scan() results. PythonNmap 4 319 Jan-21-2020, 04:41 AM
Last Post: PythonNmap
  Trying to use python-nmap but receiving however python2 or 3 can't find PortScanner. PythonNmap 21 508 Jan-19-2020, 07:54 PM
Last Post: PythonNmap
  txt-file: read and append missing data sufi 1 254 Dec-07-2019, 08:12 AM
Last Post: Gribouillis
  Unable to do the proper split using re.sub incase of missing data. Karz 1 139 Nov-17-2019, 05:58 PM
Last Post: buran
  Byte string catenation inefficient in 3.7? RMJFlack 13 875 Aug-18-2019, 05:19 AM
Last Post: RMJFlack
  HELP: String of Zero's and One's to binary byte schwasskin 1 1,349 May-19-2019, 07:31 AM
Last Post: heiner55
  Reading data from serial port as byte array vlad93 1 2,853 May-18-2019, 05:26 AM
Last Post: heiner55
  Read data of Wireless Modem in Byte Format barry76 2 488 Jan-31-2019, 11:26 AM
Last Post: barry76
  Not receiving serial data from arduino dinoel_cool 4 656 Aug-26-2018, 06:16 PM
Last Post: j.crater

Forum Jump:

Users browsing this thread: 1 Guest(s)