Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 393 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

ViRuZz

Eroberer

Dabei seit: 12.09.2008

Beiträge: 59

 

1 Zum Seitenanfang

Dienstag, 17. Januar 2012, 08:48

Broadcast Chat in C

Hi Leute,

ich habe ein Problem. Ich möchte in C einen chat programmieren mit sockets, mit dem ich mit mehreren Leuten Chatten kann. Ich habe mir gedacht ich mache das mit broadcasting, aber ich weiß nciht wie ich das realisieren soll, dass ich zu jeder Zeit schreiben und empfangen kann.
Ich habe bereits ein Server -> Clients system. Aber die Clients können nur auf Nachriten vom Server antworten und keine selber schreiben.

Ich bin jetzt auch nciht so erfahren was Socketprogrammierung angeht.

Das ist der Server erstmal ohne receivefunction

  Spoiler Spoiler

C/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>  	/* for printf(), fprintf() */
#include <windows.h>	/* for socket(),... */
#include <stdlib.h> 	/* for exit() */
#include <string.h>
#pragma comment (lib, "Ws2_32.lib")



int main()
{
	int sock;                     	/* Socket */
	struct sockaddr_in broadcastAddr; /* Broadcast address */
	char *broadcastIP;            	/* IP broadcast address */
	unsigned short broadcastPort; 	/* Server port */
	char *sendString;             	/* String to broadcast */
	int broadcastPermission;      	/* Socket opt to set permission to broadcast */
	unsigned int sendStringLen;   	/* Length of string to broadcast */
	WSADATA wsaData;              	/* Structure for WinSock setup communication */


	broadcastIP = "255.255.255.255";        	/* broadcast IP address */ 
	broadcastPort = atoi("12345");	/*  broadcast port */
	sendString = "TEST";         	/* string to broadcast */

	if (WSAStartup(MAKEWORD(2, 0), &wsaData) != 0) /* Load Winsock 2.0 DLL */
	{
    	printf( "WSAStartup() failed");
	}

	/* Create socket for sending/receiving datagrams */
	if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)


	/* Set socket to allow broadcast */
	broadcastPermission = 1;
	if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &broadcastPermission, 
      	sizeof(broadcastPermission)) < 0)


	/* Construct local address structure */
	memset(&broadcastAddr, 0, sizeof(broadcastAddr));   /* Zero out structure */
	broadcastAddr.sin_family = AF_INET;             	/* Internet address family */
	broadcastAddr.sin_addr.s_addr = inet_addr(broadcastIP);/* Broadcast IP address */
	broadcastAddr.sin_port = htons(broadcastPort);     	/* Broadcast port */

	sendStringLen = strlen(sendString);  /* Find length of sendString */


	for (;;) 
	{
  	//	Broadcast sendString in datagram to clients every 3 seconds
     	if (sendto(sock, sendString, sendStringLen, 0, (struct sockaddr *) 
           	&broadcastAddr, sizeof(broadcastAddr)) != sendStringLen)
		printf("Nachricht: %s",sendString);

    	Sleep(3000);   //Avoids flooding the network 
	}
	/* NEVER REACHED */
}


Ich hoffe ihr habt Tipps für mich wie ich das realisieren soll.

MFG ViRuZz
 

stfschaefer

Routinier

Dabei seit: 21.08.2010

Beiträge: 252

 

2 Zum Seitenanfang

Sonntag, 22. Januar 2012, 16:18

Wenn du ein Chat-Program schreiben willst für den direkten Austausch von text, dann muss der Client selber als "server" funktionieren.

Denn er sendet Nachrichten und empfängt sie auch.

Du hast generell zwei Wege, um dies zu realisieren. Das eine ist, dass du in WMS (Windows Message System) spezielle Signale auswertest (Empfangene Nachrichten z.B.) und weiterleitest (z.B. die empfangene Nachricht auswerten und dekodieren). Auch Ein textfeld zur Kodierung eingegebeneer Nachrichten.
Was du brauchst ist dann entweder direkte Verbindung (z.B. bekannte Adresse des Gegenübers) und/oder ein dritter PC, der als Vermittler fungiert und lediglich als Verteiler fungiert.
 

Ähnliche Themen