Ich hab hier eine Clientapplikation, die in C geschrieben ist und normalerweise von einem Server, der ebenfalls in C geschrieben ist Daten (sprich strings per UDP Socket empfängt). Den Source vom C Server habe ich, von dem Client, der die Daten sendet leider nicht.
Nun brauch ich aber einen Python Server dafür. Das Problem ist aber, dass dieser den Text abgehackt bekommt und die einzelnen Wörter sich teilweise wiederholen. Mit dem C Server kommen die Daten problemlos an.
Hier der C Server:
Code: Alles auswählen
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define MAX_MSG 512
int main(int argc, char *argv[])
{
int sd, rc, n, cliLen;
struct sockaddr_in cliAddr, servAddr;
char msg[MAX_MSG];
long port_to_use = 50007;
sd=socket(AF_INET, SOCK_DGRAM, 0);
if(sd<0)
{
exit(1);
}
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(port_to_use);
rc = bind (sd, (struct sockaddr *) &servAddr,sizeof(servAddr));
while(1)
{
memset(msg,0x0,MAX_MSG);
cliLen = sizeof(cliAddr);
n = recvfrom(sd, msg, MAX_MSG, 0,(struct sockaddr *) &cliAddr, &cliLen);
printf("%s",msg);
}
return 0;
}
Code: Alles auswählen
from socket import *
PORT = 50007
BUFSIZE = 512
def main():
s = socket(AF_INET, SOCK_DGRAM)
s.bind(("", PORT))
while 1:
data = ""
data, (client_ip,client_port) = s.recvfrom(BUFSIZE)
if data == "":
break
else:
print data
s.close()
if __name__ == '__main__':
main()
Wenn ich bspw. den String
============ blabla ============
foo: bar
foo2: bar2
=============================
geschickt bekomme, wird er mit dem Python server in etwa so dargestellt:
ar2
=======
Mit dem C Server klappts wie gesagt gut