2010-05-13 5 views
3

Je veux créer un serveur et un client (deux programmes distincts) où dans le serveur crée deux tuyaux nommés (je suppose que c'est le minimum requis pour flux de trafic bidirectionnel), puis le client est démarré, et le client et le serveur devraient être en mesure d'envoyer et de recevoir des données de deux manières tout le temps (types full duplex). Je pense que cela nécessiterait des tuyaux non bloquants Je voudrais un peu d'aide car j'ai pu créer un type de communication semi-duplex mais j'ai du mal à faire un transfert transparent des données entre le client et le serveur.Besoin d'avoir des canaux nommés non bloquants capables de communication bidirectionnelle dans c sur Linux

Merci

+0

Vous souhaitez effectuer une communication inter-processus ou un réseau client-serveur? – clyfe

+0

Inter communication de communication pas réseau thingy. – kush87

Répondre

5

options possibles:

  1. sockets de domaine local: la famille AF_LOCAL avec SOCK_STREAM, SOCK_DGRAM, type SOCK_SEQPACKET. Le socket peut être "en mémoire", ce qui signifie que vous vous connectez à l'aide d'une chaîne unique, ou il peut s'agir d'un fichier de socket dans le système de fichiers. Il fonctionne comme n'importe quel socket réseau, full-duplex.

  2. Deux tubes: un pour la lecture, un pour l'écriture (et vice versa pour l'autre processus). Peut-être un peu plus compliqué de suivre deux tuyaux, par opposition à la socket du domaine local.

Helpful link Vérifiez la partie sur les tuyaux et celui sur les sockets Unix.

+1

D'accord - Les sockets 'AF_UNIX' /' AF_LOCAL' sont vraiment ce que vous voulez ici. – caf

+0

Salut, Je sais que je devrais utiliser des douilles à de telles fins mais l'exigence est des pipes. J'ai écrit du code en utilisant deux canaux nommés (un pour la lecture et un pour l'écriture), et j'ai réussi à obtenir un flux de données bidirectionnel. Logique est quelque chose comme ça, j'ouvre un tube nommé pour lire avec O_NONBLOCK drapeau, lancer une boucle infinie essayer de lire le contenu, si elle renvoie plus de 0 octets, j'ouvre un autre tuyau pour l'écriture (avec O_NONBLOCk) et écris le contenu reçu à ce tuyau et le fermer. Ceci est le code du serveur que j'explique. Cela fonctionne, mais quand il est démarré, il prend presque tout mon processeur. – kush87

+0

Comment puis-je réduire l'utilisation de ce processeur. S'il vous plaît aider. – kush87

0

Avez-vous envisagé d'utiliser select() pour gérer la lecture du tube?

Questions connexes