webForumDet fria alternativet

Göra en chat

C/C++ur C/C++

4 svar · 297 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#1

Vill lära mig hur winsock (eller om det är winsock2 jag ska använda) fungerar och tänkte att göra en chat eller nåt litet projekt vore en bra början. Men då kom jag på att jag inte hade en aning om hur man gör. Så var kan jag lära mig? Finns det några bra toturials?

PeWMedlem sedan juni 200010 432 inlägg
RezaMedlem sedan feb. 2001107 inlägg
#3

http://www.sockaddr.com/ExampleSourceCode.html

MSDN är ju annars det bästa källan (enligt mig):

Platform SDK
Networking and Directory Services
Network Protocols
Windows Sockets Version 2

Alpha IIMedlem sedan maj 20002 993 inlägg
#4

Hoppades på att det skulle fungera men det gjorde det inte :(
Har inte riktigt greppat hur sockets fungerar och om jag kanske behöver en liste socket här och om jag på ngt sätt måste använda accept()?!

#include <iostream>
#include <windows.h>
#include <winsock.h>
using namespace std;

void sleep(int);

bool server_started=false;

int main(int argc, char **argv)
{
	system("cls");
	cout << "*******************************************\n";
	cout << "*                 CHAT XXS                *\n";
	cout << "*******************************************\n";
	cout << "\n";

	char ip[25];
	cout << "Connect to IP: ";
	cin >> ip;

	int port = 5757;

	WSADATA w;
	WSAStartup(0x0202, &w);

    LPHOSTENT lpHostEntry;
	lpHostEntry = gethostbyname(ip);

	SOCKET	remote_socket;
	remote_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	SOCKADDR_IN sa_server;
	sa_server.sin_family = AF_INET;
	sa_server.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
	sa_server.sin_port = htons(port);

	connect(remote_socket, (LPSOCKADDR)&sa_server, sizeof(struct sockaddr));

	char buffer[256];
	bool done=false;
	do
	{
		memset(buffer, 0, sizeof(buffer));
		recv(remote_socket, buffer, sizeof(buffer), 0);
		printf("\nResponse: %s\n", buffer);
		printf("Send: ");
		cin >> buffer;

		if(!strcmp(buffer,"exit"))
			done = true;
		else
			send(remote_socket, buffer, sizeof(buffer), 0);

	} while(!done);

	closesocket(remote_socket);
	WSACleanup();

	return 0;
}

void sleep(int ms)
{
	int start = GetTickCount();
	while(start+ms>GetTickCount());
}
RezaMedlem sedan feb. 2001107 inlägg
#5

Jag hoppas att detta kan hjälpa dig (bifogad fil), det är som du ser inte helt komplett och det finns säkert en hel del andra sätt att göra det på, men se det som en bra start punkt.

135 ms totalt · 3 externa anrop · v20260731065814-full.c74b5be1
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)