Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 17:23:19 Předmět: |
|
|
kód: |
#undef UNICODE
#define WIN32_LEAN_AND_MEAN
#include <WinSock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <WinError.h>
#include "StdAfx.h"
#include <stdio.h>
// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Ws2_32.dll")
// #pragma comment (lib, "Mswsock.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
using namespace std;
int __cdecl main(void)
{
WSADATA wsaData;
int iResult;
SOCKET ListenSocket = INVALID_SOCKET;
SOCKET ClientSocket = INVALID_SOCKET;
struct addrinfo *result = NULL;
struct addrinfo hints;
int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
// Resolve the server address and port
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed with error: %d\n", iResult);
WSACleanup();
return 1;
}
// Create a SOCKET for connecting to server
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}
// Setup the TCP listening socket
iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("bind failed with error: %d\n", WSAGetLastError());
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
freeaddrinfo(result);
iResult = listen(ListenSocket, SOMAXCONN);
if (iResult == SOCKET_ERROR) {
printf("listen failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// Accept a client socket
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// No longer need server socket
closesocket(ListenSocket);
// Receive until the peer shuts down the connection
do {
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
printf("Bytes received: %d\n", iResult);
// Echo the buffer back to the sender
iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
if (iSendResult == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
printf("Bytes sent: %d\n", iSendResult);
}
else if (iResult == 0)
printf("Connection closing...\n");
else {
printf("recv failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (iResult > 0);
// shutdown the connection since we're done
iResult = shutdown(ClientSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
// cleanup
closesocket(ClientSocket);
WSACleanup();
return 0;
} |
Pridal jsem tu knihovnu i naklikanim a chyby se nezmenily. |
|
Návrat nahoru |
|
|
Vlatom
Založen: 29. 03. 2011 Příspěvky: 19
|
Zaslal: 2. říjen 2011, 17:23:34 Předmět: |
|
|
mival napsal: |
... protoze anglicky moc nemumim... |
Tak se uč, to je základ |
|
Návrat nahoru |
|
|
Vlatom
Založen: 29. 03. 2011 Příspěvky: 19
|
Zaslal: 2. říjen 2011, 17:26:18 Předmět: |
|
|
Zkus includnout Ws2tcpip.h místo ws2tcpip.h |
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 17:28:19 Předmět: |
|
|
Je mi 13 tak doufam ze me to ve skole nauci.
P.S. dat tam presnej nazev nepomohlo. Tu knihovnu to skoro urcite naincludovalo, takze myslim ze v tom problem neni. |
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 17:30:43 Předmět: |
|
|
perry napsal: |
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje.... |
Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil. |
|
Návrat nahoru |
|
|
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 2. říjen 2011, 17:40:50 Předmět: |
|
|
mival napsal: |
perry napsal: |
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje.... |
Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil. |
Aha, divil jsem se, odkud pocházejí tvé mistrovské dovednosti... _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
|
Vlatom
Založen: 29. 03. 2011 Příspěvky: 19
|
Zaslal: 2. říjen 2011, 17:52:16 Předmět: |
|
|
A jestli ti můžu poradit, tak zkus něco jednoduššího třeba Deplhi (na to sem chodil jako malej do kroužku ) nebo C# je určitě víc začátečník friendly (z mého pohledu) |
|
Návrat nahoru |
|
|
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 2. říjen 2011, 17:57:37 Předmět: |
|
|
mival napsal: |
Je to na me moc tezke, protoze anglicky moc nemumim. |
Pokud chces programovat neco slozitejsiho nez je Pong, tak se anglicky budes muset naucit perfektne, veskere materialy jsou v anglictine.
Jen sem tam nekdo neco prelozi, popr. napise neco v cestine, ale bez anglictiny se nehnes.
EDIT: ugh, clovek si otevre stranku s prispevky, zajde uvarit caj, napise odpoved a mezitim je tam uz cela stranka jinych odpovedi
Naposledy upravil satik dne 2. říjen 2011, 17:59:51, celkově upraveno 1 krát |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 2. říjen 2011, 17:59:33 Předmět: |
|
|
Bez angličtiny se programovat nedá. Sice je tu pár cz tutoriálů, ale nepokryjí vše.. a navíc jakmile se něco podělá (jako že jo), tak už chybu v češtině nenajdeš.
mival napsal: |
perry napsal: |
Programovat cokoli stylem copy&paste je největší "prasečina" co jde... Nic se nenaučíš, většinou to nefunguje.... |
Ja se tak ucil PHP a vse co jsem zkopiroval jsem vetsinou pak hned pochopil a brzy se to naucil. |
No.. v PHP muzes nahodne mlatit hlavou do klavesnice... a vysledek bude na 90% spustitelný a něco vykoná _________________ Perry.cz |
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 18:07:10 Předmět: |
|
|
To je psycho, neco opravim aby to fungovalo (podle ruznych rad na anglickych forech) a dopadne to tak ze to zahlasi dalsi chyby . |
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 18:12:50 Předmět: |
|
|
Chyby:
2 unresolved externals
unresolved external symbol "int __stdcall getaddrinfo(char const *,char const *,struct addrinfo const *,struct addrinfo * *)" (?getaddrinfo@@YGHPBD0PBUaddrinfo@@PAPAU1@@Z) referenced in function _main
unresolved external symbol "void __cdecl freeaddrinfo(struct addrinfo *)" (?freeaddrinfo@@YAXPAUaddrinfo@@@Z) referenced in function _main
declaration is incompatible with "void __stdcall freeaddrinfo(PADDRINFOA pAddrInfo)"
kód: |
#undef UNICODE
#define WIN32_LEAN_AND_MEAN
#include <WinSock2.h>
#include <Ws2tcpip.h>
#include <stdlib.h>
#include <WinError.h>
#include "StdAfx.h"
#include <stdio.h>
// Need to link with Ws2_32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "ws2_32.dll")
//#pragma comment (lib, "Mswsock.lib")
void freeaddrinfo(
__in struct addrinfo *ai
);
int WSAAPI getaddrinfo(
_In_opt_ PCSTR pNodeName,
_In_opt_ PCSTR pServiceName,
_In_opt_ const ADDRINFOA *pHints,
_Out_ PADDRINFOA *ppResult
);
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
using namespace std;
int __cdecl main(void)
{
WSADATA wsaData;
int iResult;
SOCKET ListenSocket = INVALID_SOCKET;
SOCKET ClientSocket = INVALID_SOCKET;
struct addrinfo *result = NULL;
struct addrinfo hints;
int iSendResult;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
// Resolve the server address and port
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if ( iResult != 0 ) {
printf("getaddrinfo failed with error: %d\n", iResult);
WSACleanup();
return 1;
}
// Create a SOCKET for connecting to server
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (ListenSocket == INVALID_SOCKET) {
printf("socket failed with error: %ld\n", WSAGetLastError());
freeaddrinfo(result);
WSACleanup();
return 1;
}
// Setup the TCP listening socket
iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
printf("bind failed with error: %d\n", WSAGetLastError());
freeaddrinfo(result);
closesocket(ListenSocket);
WSACleanup();
return 1;
}
freeaddrinfo(result);
iResult = listen(ListenSocket, SOMAXCONN);
if (iResult == SOCKET_ERROR) {
printf("listen failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// Accept a client socket
ClientSocket = accept(ListenSocket, NULL, NULL);
if (ClientSocket == INVALID_SOCKET) {
printf("accept failed with error: %d\n", WSAGetLastError());
closesocket(ListenSocket);
WSACleanup();
return 1;
}
// No longer need server socket
closesocket(ListenSocket);
// Receive until the peer shuts down the connection
do {
iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
if (iResult > 0) {
printf("Bytes received: %d\n", iResult);
// Echo the buffer back to the sender
iSendResult = send( ClientSocket, recvbuf, iResult, 0 );
if (iSendResult == SOCKET_ERROR) {
printf("send failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
printf("Bytes sent: %d\n", iSendResult);
}
else if (iResult == 0)
printf("Connection closing...\n");
else {
printf("recv failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
} while (iResult > 0);
// shutdown the connection since we're done
iResult = shutdown(ClientSocket, SD_SEND);
if (iResult == SOCKET_ERROR) {
printf("shutdown failed with error: %d\n", WSAGetLastError());
closesocket(ClientSocket);
WSACleanup();
return 1;
}
// cleanup
closesocket(ClientSocket);
WSACleanup();
return 0;
} |
|
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 18:17:57 Předmět: |
|
|
Je mi celkem jedno jak to bude fungovat ale potrebuji server a client abych proste mohl pres net mezi uzivateli takto posilat data.
Kdybych mel server a client hotovy, uz bych konecne mohl delat co chci.
A opravdu se omlouvam za svou hloupost ale dost blbe se neco hleda atd. kdyz tu AJ moc dobre neumite. |
|
Návrat nahoru |
|
|
uiii
Založen: 12. 08. 2007 Příspěvky: 251
|
Zaslal: 2. říjen 2011, 18:30:56 Předmět: |
|
|
mival napsal: |
... protoze anglicky moc nemumim... |
mival napsal: |
Je mi 13 tak doufam ze me to ve skole nauci. |
Rozhodně nepočítej s tim ze ONI tě to naučí. Mušís sám chtít snažit se aktvině zapojovat. Mám to z vlastní zkušenosti - na gymplu mě skoro nic nenaučili protože jsem se tehdy moc učit nechtěl. Nejvíc se naučís, že prostě buděš angličtinu používat (číst anglický články, psát do diskuzí atd.), ač třeba ze začátku blbě a těžko, ale časem se to zlepší. |
|
Návrat nahoru |
|
|
mival
Založen: 28. 08. 2010 Příspěvky: 85
|
Zaslal: 2. říjen 2011, 19:03:52 Předmět: |
|
|
SERVER:
kód: |
#include <winsock2.h>
#include <iostream>
#include "stdafx.h"
using namespace std;
int StartServerListening(unsigned short port);
void EndServer(int socket);
int main()
{
int serverSocket; // Used to listen
serverSocket = StartServerListening(7700);
if (serverSocket == -1)
{
cout << "Boze vse jde spatne!!\n";
return 1;
}
int clientSocket; // Socket to accept
clientSocket = accept(serverSocket, 0, 0);
if (clientSocket == SOCKET_ERROR)
{
cout << "Server: Heh, Taught him a lesson on acceptence...\n";
}
int nBytes;
#define MAX_MESSAGE_SIZE 100 // We need a big enough buffer for our maximum message size.
char buffer[MAX_MESSAGE_SIZE];
unsigned long messageSize; // We need a variable for our size.
nBytes = recv(clientSocket, (char*)&messageSize, sizeof(messageSize), 0);
if (nBytes == SOCKET_ERROR)
{
cout << "Server: I failed you master! Nothing was recieved!\n";
}
messageSize = ntohl(messageSize); // Remember to fix our byte ordering since this is a number
nBytes = recv(clientSocket, buffer, messageSize, 0);
if (nBytes == SOCKET_ERROR)
{
cout << "Server: Recv Failed!\n";
}
buffer[messageSize] = ' '; // Place the terminator in the string 'messageSize'
cout << "Server: Someone said : " << buffer << endl;
// closesocket(clientSocket);
// EndServer(serverSocket);
cout << "Server: Press any key to turn me off ...\n";
getchar();
return 0;
}
// -----------------------------------------------------------------------------------
// StartServerListening() - a function to startup winsock, and open a socket for listening
int StartServerListening(unsigned short port)
{
int error;
WSAData wsaData;
if ((error = WSAStartup(MAKEWORD(2, 2), &wsaData)) == SOCKET_ERROR) {
cout << "Server: WinSock is being a bitch, smack it a few times eh?\n";
return -1;
}
int mySocket = socket(AF_INET, SOCK_STREAM, 0);
if (mySocket == SOCKET_ERROR)
{
cout << "Server: Something went terribly wrong, the socket wont open!\n";
return -1;
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = INADDR_ANY;
if (bind(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
cout << "Server: It wont let me bind correctly.\n";
closesocket(mySocket);
return -1;
}
if (listen(mySocket, 5) == SOCKET_ERROR)
{
cout << "Server: Damnit.. im deaf... Listening Failed!\n";
closesocket(mySocket);
return -1;
}
cout << "Server: Im up and running boss!\n";
return mySocket;
}
// -----------------------------------------------------------------------------------
// EndServer() - a function to shutdown a socket and clean up winsock
void EndServer(int socket)
{
closesocket(socket);
WSACleanup();
cout << "Server: Remember the Alamo!\n";
} |
Client
kód: |
// Enathoria Client.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#define _CRT_SECURE_NO_DEPRECATE
int StartClient(unsigned short port, const char* serverName);
void EndClient(int clientSocket);
#include <winsock2.h>
#include <iostream>
using namespace std;
int main()
{
cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
<< "Client: And we Are done!\n"
<< "Client: Celestialkey's Tutorial\n\n"
<< "Client: Thanks for following the tutorial to the end\n"
<< "Client: if you want more good tutorials such as this, join me on\n"
<< "Client: http://Celestial.muux.org\n\n\n\n\n\n";
// This simply changes the colors to make it look cooler
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, 2);
// -----------------------------------------------------
int mySocket;
mySocket = StartClient(7700, "localhost");
if (mySocket == -1)
{
EndClient(mySocket);
return 1;
}
int nBytes;
#define MAX_MESSAGE_SIZE 4096
char buffer[MAX_MESSAGE_SIZE];
cout << "Client: Type what you want to send, if you want to exit, type 'exit'\nClient: LETS DO IT!\nClient: > ";
for (;;)
{
gets(buffer);
if (strcmp(buffer, "exit") == 0)
{
break;
}
unsigned long messageSize = strlen(buffer);
messageSize = htonl(messageSize);
if ((nBytes = send(mySocket, (char*)&messageSize, sizeof(messageSize), 0)) == SOCKET_ERROR)
{
cout << "Client: Send Failed Sir!\n";
}
messageSize = ntohl(messageSize);
if ((nBytes = send(mySocket, buffer, messageSize, 0)) == SOCKET_ERROR)
{
cout << "Client: It wont go through sir!!\n";
}
cout << "\n>";
}
EndClient(mySocket);
return 0;
}
int StartClient(unsigned short port, const char* serverName)
{
int error;
WSAData wsaData;
if ((error = WSAStartup(MAKEWORD(2, 2), &wsaData)) == SOCKET_ERROR)
{
cout << "Client: Winsock is being a bitch!\n";
return -1;
}
int mySocket = socket(AF_INET, SOCK_STREAM, 0);
if (mySocket == SOCKET_ERROR)
{
cout << "Client: The Socket is stuck sir! It wont open!\n";
return -1;
}
struct hostent *host_entry;
if ((host_entry = gethostbyname(serverName)) == NULL)
{
cout << "Client: I'm lost =.=; Wheres the host?\n";
}
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = *(unsigned long*) host_entry->h_addr;
if (connect(mySocket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{
cout << "Client: ****ing server wont let me connect dude.\n";
}
cout << "Client: I-AM-RUNNING!\n";
return mySocket;
}
void EndClient(int clientSocket)
{
closesocket(clientSocket);
WSACleanup();
cout << "Client: Dont rush me damnit, im shutting down at my own damn pace. -.-;\n";
} |
Prosim vas moc, upravte to prosim tak aby se mohlo pripojit kolik chce clientu a aby client videl zpravy ostatnich. Moc vas o to zadam. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 2. říjen 2011, 19:06:52 Předmět: |
|
|
uiii napsal: |
mival napsal: |
... protoze anglicky moc nemumim... |
mival napsal: |
Je mi 13 tak doufam ze me to ve skole nauci. |
Rozhodně nepočítej s tim ze ONI tě to naučí. Mušís sám chtít snažit se aktvině zapojovat. Mám to z vlastní zkušenosti - na gymplu mě skoro nic nenaučili protože jsem se tehdy moc učit nechtěl. Nejvíc se naučís, že prostě buděš angličtinu používat (číst anglický články, psát do diskuzí atd.), ač třeba ze začátku blbě a těžko, ale časem se to zlepší. |
Přesně tak. Já jsem to měl podobně. Angličtina na základce za moc nestála a já jsem nebyl schopný se sám něco přiučit... Pak se to změnilo na střední... Jak jsem začal sledovat The IT Crowd, Black Books a The Big Bang Theory + louskání anglických tutoriálů, má úroveň angličtiny (alespoň na úrovni čtení) se mnohonásobně zlepšila. Jak už bylo psáno...všechno je to o tom chtít a začínat od jednoduchých věcí... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
|