Eric Brunel said:
Nick Keighley wrote:
Communications between C and Python via sockets definetly work: we do that
every day (no kidding ;-)
Can you post an example of your code?
well I assumed sockets actually worked I was guessing the slight
differences in the interfaces caused me to set the two ends up
slightly
differently.
Python Echo Server
------------------
import socket
DEFAULT_PROTOCOL = 0
PORT = 8702
sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM,
DEFAULT_PROTOCOL)
sock.bind (('', PORT))
sock.listen (5)
# wait for a connection
try:
while True:
newSocket, address = sock.accept ()
print "connected from", address
while True:
receivedData = newSocket.recv (8192)
if not receivedData:
break
print "received: ", receivedData
newSocket.sendall (receivedData)
newSocket.close()
print "disconnected from", address
finally:
sock.close ()
---------------------------------------------------------------------
C echo client (includes omitted)
-------------------------------
#define DEFAULT_PROTOCOL 0
#define PORT 8702
#define HOST "localhost"
/* #define HOST "127.0.0.1" */
/* #define HOST "cmopc018" */
#define TYPE SOCK_STREAM
int main (void)
{
struct hostent *phe;
struct sockaddr_in sin;
int s;
s = socket (PF_INET, TYPE, DEFAULT_PROTOCOL);
if (s < 0)
raise_report (LEVEL_FATAL, "tiny_echo", "can't create socket:
%s", strerror (errno));
/*
* connect to the socket
*/
memset (&sin, 0, sizeof sin);
sin.sin_family = AF_INET;
sin.sin_port = PORT;
if ((phe = gethostbyname (HOST)))
{
memcpy (&sin.sin_addr, phe->h_addr_list[0], phe->h_length);
raise_report (LEVEL_INFO, "tiny_echo", "addr is %X",
sin.sin_addr);
}
else
if ((sin.sin_addr.s_addr = inet_addr (HOST)) == INADDR_NONE)
raise_report (LEVEL_FATAL, "tiny_echo", "can't get \"%s\"
host entry", HOST);
if (connect (s, (struct sockaddr *)&sin, sizeof sin) < 0)
raise_report (LEVEL_FATAL, "tiny_echo", "can't connect to
%s.%d: %s", HOST, sin.sin_port, strerror (errno));
raise_report (LEVEL_INFO, "tiny_echo", "CONNECTED");
return 0;
}
------------------------------------------------------------------------------