XHotSniperX
Lt. Junior Grade
- Registriert
- Jan. 2008
- Beiträge
- 472
Hi Leuteeeeee was geht ab
ich möchte ein simples Chatprogramm machen, wie im Titel beschrieben. Hier habe ich mit einem kleinen Testprogramm angefangen:
Das Problem ist, wenn ich beide Programme starte mit der IP-Adresse "127.0.0.1" und Port "6666" (oder auch zwei verschiedene Ports), dann stecken beide Programme im accept fest und keiner schafft das connect().
Was muss ich ändern, damit beide Clients miteinander verbinden können und einfach Nachrichten erhalten können (was dann später mit Threads oder so realisierbar wäre)?
ich möchte ein simples Chatprogramm machen, wie im Titel beschrieben. Hier habe ich mit einem kleinen Testprogramm angefangen:
Code:
#include <sys/types.h> // für socket()
#include <sys/socket.h> // für socket()
#include <netinet/in.h> // für socket()
#include <assert.h> // für assert()
#include <stdlib.h> //für calloc()
#include <netdb.h> // für getprotobyname()
#include <unistd.h> // für close()
#include <arpa/inet.h> //für inet_ntop()
#include <netinet/in.h> //für INET_ADDRSTRLEN
#include <string.h> // für memset()
#include <stdio.h>
int main(int argc, char *argv[]) {
/* Socket erstellen - TCP, IPv4, keine Optionen */
printf("Erstellt Socket...\n");
int lsd = socket(AF_INET, SOCK_STREAM, 0);
/* IPv4, Port: argv[2], IP-Adresse: argv[1] */
printf("Socketadresse uebernehmen...\n");
struct sockaddr_in saddr;
bzero(&saddr, sizeof(saddr));
inet_pton(AF_INET, argv[1], &(saddr.sin_addr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons((int)*argv[2]);
/* Socket an Port binden */
printf("Socket an Port binden...\n");
bind(lsd, (struct sockaddr*) &saddr, sizeof(saddr));
/* Auf Socket horchen (Listen) */
printf("Auf Socket horchen...\n");
listen(lsd, 10);
while(1) {
/* Puffer und Strukturen anlegen */
struct sockaddr_in clientaddr;
char buffer[10];
bzero(buffer, sizeof(buffer));
/* Verbindung aufbauen, bin ich der erste? */
if(connect(lsd, (struct sockaddr*) &saddr, sizeof(saddr)) == 0) {
printf("Erfolgreich mit Partner connected...\n");
/* Puffer mit Text füllen */
char buffer[5];
strcpy(buffer, "test");
/* "test" String an Partnerclient senden */
int bytes = send(lsd , buffer, sizeof(buffer), 0);
/* Ausgabe was gesendet wurde */
printf("Sende String: %s\n", buffer);
printf("Es wurden %d Bytes gesendet\n", bytes);
}
else {
printf("Konnte nicht mit Partner connecten...\n");
}
/* Auf Verbindung warten, bei Verbindung Connected-Socket erstellen */
printf("Auf Verbindung warten...\n");
socklen_t clen = sizeof(clientaddr);
int csd = accept(lsd, (struct sockaddr*) &clientaddr, &clen);
/* Vom Client lesen und ausgeben */
int bytes = recv(csd, buffer, sizeof(buffer), 0);
printf("Der Client hat folgenden String gesendet: %s\n", buffer);
printf("Es wurden %d Bytes empfangen\n", bytes);
/* Verbindung schließen */
close(csd);
}
close(lsd);
return 0;
}
Das Problem ist, wenn ich beide Programme starte mit der IP-Adresse "127.0.0.1" und Port "6666" (oder auch zwei verschiedene Ports), dann stecken beide Programme im accept fest und keiner schafft das connect().
Was muss ich ändern, damit beide Clients miteinander verbinden können und einfach Nachrichten erhalten können (was dann später mit Threads oder so realisierbar wäre)?