Saya mencoba membuat soket unix untuk memungkinkan beberapa kode c saya berbicara dengan beberapa kode python saya. Kode C bertindak sebagai soket dan python sebagai klien. Sejauh ini saya telah dapat membuat soket dan menghubungkan klien ke sana, tetapi saya tidak dapat mengirim data melaluinya atau menerima data melalui salah satu arah (saya tidak tahu di mana masalahnya).
Saya sudah mencoba mengubah pengkodean data yang saya kirim, saya sudah mencoba mengirim data berulang kali jika ini masalah waktu, sepertinya ini bukan masalahnya.
Kode server C:
int makeSocket(struct sockaddr_un * addr, char* path){
unlink(path);
int sock;
//struct sockaddr_un addr;
sock = socket(AF_UNIX, SOCK_STREAM, 0);
fcntl(sock, F_SETFL, O_NONBLOCK);
addr->sun_family = AF_UNIX;
strncpy(addr->sun_path, path, sizeof(addr->sun_path));
size_t size = (offsetof(struct sockaddr_un, sun_path) + strlen(addr->sun_path));
if (bind(sock, (struct sockaddr*) addr, size) < 0){
printf("failed to bind\n");
}
listen(sock, 5);
return sock;
}
//this isn't actually here but just so you can see it being created, its a global int
globSock = makeSocket("socket.soc");
Kemudian dalam panggilan balik menganggur:
f (!connected){
int len = sizeof(addr);
if (connection = accept(globSock, (struct sockaddr*) &addr, &len) < 0){
printf("Can't listen\n");
} else {
printf("connected\n");
send(connection, "HI", strlen("HI"), 0);
connected = 1;
}
} else {
int rc;
if (!recevd && ((rc = recv(connection,buffer,BUFFERSIZE,0)) < 0)){
printf("nope %s\n", buffer);
} else if (rc == 0) {
connected = 0;
printf("%s\n", buffer);
} else {
recevd = 1;
printf("%s\n", buffer);
}
}
terhubung dan menerima adalah variabel flag dan buffer adalah array char (ukuran buffer adalah 100, hanya #define)
Klien Python:
# -*- coding: utf-8 -*-
import socket
import os
print("Connecting...")
if os.path.exists("socket.soc"):
client = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
client.connect("socket.soc")
print("Ready.")
print("Ctrl-C to quit.")
print("Sending 'DONE' shuts down the server and quits.")
while True:
try:
x = input("> ")
if "" != x:
print("SEND:", x)
client.send(x.encode('utf-8'))
if "DONE" == x:
print("Shutting down.")
break
except KeyboardInterrupt as k:
print("Shutting down.")
client.close()
break
else:
print("Couldn't Connect!")
print("Done")
Di sisi C berulang kali mencetak "tidak" (saya belum menerima apa pun yang dicetak) dan di sisi python hanya meminta masukan, Anda dapat memberikan pesan, ia akan 'mengirimkannya' dan kemudian meminta yang lain dll...
strncpy()
tidak menghentikan string: stackoverflow .com/questions/1453876/ - person Andrew Henle   schedule 19.07.2019