![]() |
|
|
#1 |
|
مديريت بخش
تاریخ عضویت: Feb 2010
محل سکونت: home/
نوشته ها: 146
Thanks: 117
Thanked 197 Times in 92 Posts
|
حتما وقتی که می خواسته اید در C++ با سوکت ها کار کنید با کتابخانه ها و دستوراتی برخورد کردید که فقط در لینوکس کار می کنند. اگر می خواهید در ویندوز از سوکت استفاده کنید باید کمی بیشتر کد بنویسید و از کتابخانه های ویندوزی استفاده کنید.
کد زیر برای سمت کلاینت در ویندوز نوشته شده است. با بررسی اختلافها با کد لینوکسی می توانید کد سمت سرور را نیز براحتی بنویسید. کد:
#include <winsock.h>
#include <sys/types.h>
#include <unistd.h>
#include <windows.h>
void sError(char*);
int main()
{
WORD version;
WSADATA wsaData;
int rVal=0;
int portNo = 1234;
version = MAKEWORD(1,1);
WSAStartup(version,(LPWSADATA)&wsaData);
LPHOSTENT hostEntry;
char *buf = "Message to be send";
//SOCKET
//store information about the server
hostEntry = gethostbyname("localhost");
if(!hostEntry)
{
sError("Failed gethostbyname()");
return CS_ERROR;
}
//create the socket
SOCKET theSocket = socket(AF_INET, SOCK_STREAM, 0);
if(theSocket == SOCKET_ERROR)
{
sError("Failed socket()");
return CS_ERROR;
}
//Fill in the sockaddr_in struct
SOCKADDR_IN serverInfo;
serverInfo.sin_family = AF_INET;
serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
serverInfo.sin_port = htons(portNo);
rVal=connect(theSocket,(LPSOCKADDR)&serverInfo, sizeof(serverInfo));
if(rVal==SOCKET_ERROR)
{
sError("Failed connect()");
return CS_ERROR;
}
cout<<"Connection established.\n";
//sending message
rVal = send(theSocket, buf, strlen(buf), 0);
if(rVal == SOCKET_ERROR)
{
sError("Failed send()");
return CS_ERROR;
}
cout<<"Message sent.\n";
//closing socket
closesocket(theSocket);
cout << "Closing client"<< endl;
WSACleanup();
return 0;
}
void sError(char *str)
{
MessageBox(NULL, str, "SOCKET ERROR", MB_OK);
WSACleanup();
}
__________________
~::/It's not how YOU play the game. It's how the GAME plays you\::~
|
|
|
|
![]() |
| برچسب ها |
| c++, socket, socket programming, windows |
| ابزارهای موضوع | |
| نحوه نمایش | |
|
|