Chat Programmieren
-
Ich habe vor einen Chat in C zu Programmieren wo 2Leute miteinander Chaten können.
Nur weiß ich nicht was ich dafür alles brauch.
1 Server und 2 Clients?
-
ja, einen server und 2 mal den client. (also programmieren musst du server und clioent jeweils natürlich nur einmal ;))
man kann ein chatsystem afaik aber auch ohne server programmieren, muss mit broadcast messages arbeiten. aber davon hab ich keine ahnung.mfg,
julian
-
Willste einen Multichat oder nur normalen Chat ? Falls Multichat und du dann Probleme hast, kann ich gerne meinen Code hier posten hab das selbe letzten Monat gemacht mit select()
Gruß Chris
-
Wenn man einen simplen Chat programmieren will, braucht man doch eigentlich nur einen Server und einen Clienten, der Client connectet zum Server und dann kann gechattet werden
-
moin,
http://www.programmersheaven.com/download/29407/download.aspx
guck mal da, das ist ein sehr einfach aufgebauter chat
-
das ist kein chat sondern ein sinnloser file stream ich würde dir kernel16 empfehlen darin gibt es über 2000 "sinnvolle" funktion auch solche wie bind(socket,port)
Hier mal ein code dafür(SERVER):
#define WIN32_LEAN_AND_MEAN #include <iostream> #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <process.h> #include "Core.hpp" #include "Network.hpp" #define PORT "80" #include <time.h> KERNEL::SOCKET s, new_socket; using namespace KERNEL::NETWORK; DWORD WINAPI ProcessClient(LPVOID lpParameter) { KERNEL::SOCKET AcceptSocket = (KERNEL::SOCKET)lpParameter; // Send and receive data. int bytesSent; int bytesRecv = ERROR_S; char sendbuf[2000] = ""; char sendbuf2[2000] = ""; char recvbuf[2000] = ""; char timebuf[128]; sprintf(sendbuf, "Hello, it's a test server at (commands: 1, 2, exit)\n"); bytesSent = Send(AcceptSocket, sendbuf); if (bytesSent == ERROR_S) { printf("Error at send hello: %ld\n"); goto fin; } while (1) { _strtime(timebuf); ZeroMemory(recvbuf, sizeof(recvbuf)); bytesRecv = Recv(AcceptSocket, recvbuf); printf("%s Client said: \"%s\"\n", timebuf, recvbuf); sprintf(sendbuf, "%s Client said: \"%s\"\n", timebuf, recvbuf); bytesSent = Send(AcceptSocket, sendbuf); if (strlen(recvbuf) == 0){ goto fin; } if (strcmp(recvbuf, "1") == 0) { sprintf(sendbuf, "WTF ?"); //printf("Sent '%s'\n", sendbuf); bytesSent = Send(AcceptSocket, sendbuf);; if (bytesSent == ERROR_S) { printf("Error at send: %ld\n"); goto fin; } } else if (strcmp(recvbuf, "2") == 0) { sprintf(sendbuf, "You typed TWO\n"); //printf("Sent '%s'\n", sendbuf); bytesSent = Send(AcceptSocket, sendbuf); if (bytesSent == ERROR_S) { printf("Error at send: %ld\n"); goto fin; } } else if (strcmp(recvbuf, "exit") == 0) { printf("Client has logged out\n"); goto fin; } else { // sprintf(sendbuf, "unknown command\n"); //printf("Sent '%s'\n", sendbuf); // bytesSent = send( AcceptSocket, sendbuf, strlen(sendbuf), 0); if (bytesSent == ERROR_S) { // printf( "Error at send: %ld\n", WSAGetLastError()); goto fin; } } } fin: printf("Client processed\n"); KERNEL::NETWORK::Close(AcceptSocket); return 0; } int main(int argc, char *argv[]) { std::cout << ("\nInitialising Winsock..."); Startup(); printf("Initialised.\n"); CreateTCP(s); std::cout << ("Socket created.\n"); //Prepare the sockaddr_in structure Bind(s, 80); // Socket,Port puts("Bind done"); //Listen to incoming connections Listen(s); //Accept and incoming connection std::cout << ("Waiting for incoming connections..."); cout << GetLastError(); while (true){ while ((new_socket = Accept(s) )!= INVALID_S) { // Create a new thread for the accepted client (also pass the accepted client socket). printf("Client Connected.\n"); DWORD dwThreadId; CreateThread(NULL, 0, ProcessClient, (LPVOID)new_socket, 0, &dwThreadId); } } if (new_socket == INVALID_S) { std::cout << ("accept failed with error code : %d"); return 1; } KERNEL::NETWORK::Close(s); return 0; }
und client:
efine WIN32_LEAN_AND_MEAN #include <iostream> #include <process.h> #include <string> #include "Core.hpp" #include "Network.hpp" KERNEL::SOCKET Socket; #define SERVER "192.168.2.101" int PORT = 80; using namespace KERNEL::NETWORK; std::string line; bool chat = false; class Buffer { public: int ID; char Message[256]; }sbuffer; char bzf[2000]; int ClientThread() { char buffer[2000] = ""; for (;; Sleep(10)) { Recv(Socket, buffer); if (strlen(buffer) > 0) { strncpy(sbuffer.Message, buffer, sizeof(sbuffer.Message)); std::cout << "<Client:" << sbuffer.ID << ":> " << sbuffer.Message << std::endl; ZeroMemory(buffer, sizeof(buffer)); } } return 0; } int main(void) { Startup(); // Create our socket CreateTCP(Socket); Connect(Socket, SERVER, PORT); // Main loop for (;;) { // Display message from server char buffer[1000]; memset(buffer, 0, 999); int inDataLength = Recv(Socket, buffer); std::cout << buffer; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientThread, NULL, NULL, NULL); for (;; Sleep(10)) { cin.getline(bzf, 2000); if (Send(Socket, bzf) < 1){ } Sleep(1000); } system("PAUSE"); return 0; }
-
https://telay.net/Kernel16.zip
für kernel16
-
Sry für 3 Threads
Der code oben hatte ein paar probleme weil ich dort an diesen code noch mit ws2 gearbeitet habeServer
///////////// // Pixisto Corperation 2014 // Add (Kevsoft.internet) in Skype for more infos // Code by Kevin Ludwig ///////////// //////////// // SERVER // //////////// #define WIN32_LEAN_AND_MEAN #include <iostream> #include <windows.h> #include <stdlib.h> #include <stdio.h> #include <process.h> #include "Core.hpp" #include "Network.hpp" #define PORT 80 #include <time.h> KERNEL::SOCKET s, new_socket; using namespace KERNEL::NETWORK; DWORD WINAPI ProcessClient(LPVOID lpParameter) { KERNEL::SOCKET AcceptSocket = (KERNEL::SOCKET)lpParameter; int bytesSent; int bytesRecv = ERROR_S; char sendbuf[2000] = ""; char recvbuf[2000] = ""; char timebuf[128]; sprintf(sendbuf, "Hello, it's a test server at (commands: 1, 2, exit)\n"); bytesSent = Send(AcceptSocket, sendbuf); if (bytesSent == ERROR_S) { printf("Error at send hello: %ld\n"); goto fin; } while (1) { _strtime(timebuf); ZeroMemory(recvbuf, sizeof(recvbuf)); bytesRecv = Recv(AcceptSocket, recvbuf); printf("%s Client said: \"%s\"\n", timebuf, recvbuf); sprintf(sendbuf, "%s Client said: \"%s\"\n", timebuf, recvbuf); bytesSent = Send(AcceptSocket, sendbuf); if (strlen(recvbuf) == 0){ goto fin; } if (strcmp(recvbuf, "1") == 0) { sprintf(sendbuf, "WTF ?"); bytesSent = Send(AcceptSocket, sendbuf);; if (bytesSent == ERROR_S) { printf("Error at send: %ld\n"); goto fin; } } else if (strcmp(recvbuf, "2") == 0) { sprintf(sendbuf, "You typed TWO\n"); bytesSent = Send(AcceptSocket, sendbuf); if (bytesSent == ERROR_S) { printf("Error at send: %ld\n"); goto fin; } } else if (strcmp(recvbuf, "exit") == 0) { printf("Client has logged out\n"); goto fin; } else { if (bytesSent == ERROR_S) { goto fin; } } } fin: printf("Client processed\n"); KERNEL::NETWORK::Close(AcceptSocket); return 0; } int main(int argc, char *argv[]) { std::cout << ("\nInitialising Winsock..."); Startup(); printf("Initialised.\n"); CreateTCP(s); std::cout << ("Socket created.\n"); Bind(s, PORT); // Socket,Port puts("Bind done"); Listen(s); std::cout << ("Waiting for incoming connections..."); while (true){ while ((new_socket = Accept(s) )!= INVALID_S) { printf("Client Connected.\n"); DWORD dwThreadId; CreateThread(NULL, 0, ProcessClient, (LPVOID)new_socket, 0, &dwThreadId); } } if (new_socket == INVALID_S) { std::cout << ("accept failed with error code : %d"); return 1; } KERNEL::NETWORK::Close(s); return 0; }
Client
///////////// // Pixisto Corperation 2014 // Add (Kevsoft.internet) in Skype for more infos // Code by Kevin Ludwig ///////////// //////////// // CLIENT // //////////// #define WIN32_LEAN_AND_MEAN #include <iostream> #include <process.h> #include <string> #include "Core.hpp" #include "Network.hpp" KERNEL::SOCKET Socket; #define SERVER "192.168.2.101" int PORT = 80; using namespace KERNEL::NETWORK; class Buffer { public: int ID; char Message[256]; }sbuffer; char bzf[2000]; int ClientThread() { char buffer[2000] = ""; for (;; Sleep(10)) { Recv(Socket, buffer); if (strlen(buffer) > 0) { strncpy(sbuffer.Message, buffer, sizeof(sbuffer.Message)); std::cout << "<Client:" << sbuffer.ID << ":> " << sbuffer.Message << std::endl; ZeroMemory(buffer, sizeof(buffer)); } } return 0; } int main(void) { Startup(); CreateTCP(Socket); Connect(Socket, SERVER, PORT); for (;;) { char buffer[1000]; memset(buffer, 0, 999); int inDataLength = Recv(Socket, buffer); std::cout << buffer; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ClientThread, NULL, NULL, NULL); for (;; Sleep(10)) { cin.getline(bzf, 2000); if (Send(Socket, bzf) < 1){ } } Sleep(1000); } system("PAUSE"); return 0; }
-
Kernel16 der Thread ist von 2007!