Показать сообщение отдельно
Старый 08.08.2005, 20:50     # 4
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Вот примерно то, yf C++ (API), если где-то я ошибся, то уж извиняйте - на вскидку все. Но основной принцип я думаю будет понятен. Передача синхронная.
Код:
....
WORD wVersionRequested;
WSADATA wsaData;
DWORD err;
wVersionRequested=MAKEWORD(2,2);
err=WSAStartup(wVersionRequested,&wsaData);
if (err!=0)
	exit(-1);
if (LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2) 
{ //If sock version lover than 2.2
	AfxMessageBox("Sock wersion lover than 2.2. Inspect your system!");
	WSACleanup();
	exit(-1);
}
...
SOCKET m_clsock1;
SOCKET m_clsock2;
m_clsock1=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //init socket
m_clsock2=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
if (m_clsock1==INVALID_SOCKET|| m_clsock2==INVALID_SOCKET) //Init error
{
	str.Format("Error at socket(): %ld\n", WSAGetLastError());
	AfxMessageBox(str);
	WSACleanup();
	exit(-1);
}

hostent* remoteHost;
unsigned int addr;
if (isalpha(host1[0]))
{
	remoteHost=gethostbyname(host1); //Get host info from name
}
else
{
	addr=inet_addr(host1);
	remoteHost=gethostbyaddr((char *)&addr, 4, AF_INET); //Get host info from IP
}
if (WSAGetLastError()!=0) //Something wrong
{
	if (WSAGetLastError()==11001)
		str="Host not found...";
	else
		str.Format("error#:%ld", WSAGetLastError());
	closesocket(m_clsock1);
	closesocket(m_clsock2);
	m_clsock1=INVALID_SOCKET;
	m_clsock2=INVALID_SOCKET;
	AfxMessageBox(str); //Inform user about it
	WSACleanup();
	exit(-1);
}

sockaddr_in clientService; 
//Fill necessary data
clientService.sin_family=AF_INET;
memcpy(&(clientService.sin_addr.s_addr),remoteHost->h_addr_list[0],4);
char *aaa=inet_ntoa(clientService.sin_addr);
clientService.sin_port=htons(3302);
//try to connect with filled data
DWORD zz=connect(m_clsock1,(SOCKADDR*)&clientService,sizeof(clientService));
if (zz==SOCKET_ERROR) //din't connected
{
	closesocket(m_clsock1);
	closesocket(m_clsock2);
	m_clsock1=INVALID_SOCKET;
	m_clsock2=INVALID_SOCKET;
	AfxMessageBox("Faild to connect!");
	WSACleanup();
	exit(-1);
}

if (isalpha(host2[0]))
{
	remoteHost=gethostbyname(host2); //Get host info from name
}
else
{
	addr=inet_addr(host2);
	remoteHost=gethostbyaddr((char *)&addr, 4, AF_INET); //Get host info from IP
}
if (WSAGetLastError()!=0) //Something wrong
{
	if (WSAGetLastError()==11001)
	str="Host not found...";
	else
		str.Format("error#:%ld", WSAGetLastError());
	closesocket(m_clsock1);
	closesocket(m_clsock2);
	m_clsock1=INVALID_SOCKET;
	m_clsock2=INVALID_SOCKET;
	AfxMessageBox(str); //Inform user about it
	WSACleanup();
	exit(-1);
}
memcpy(&(clientService.sin_addr.s_addr),remoteHost->h_addr_list[0],4);
char *aaa=inet_ntoa(clientService.sin_addr);
clientService.sin_port=htons(3302);
DWORD zz=connect(m_clsock1,(SOCKADDR*)&clientService,sizeof(clientService));
if (zz==SOCKET_ERROR) //din't connected
{
	closesocket(m_clsock1);
	closesocket(m_clsock2);
	m_clsock1=INVALID_SOCKET;
	m_clsock2=INVALID_SOCKET;
	WSACleanup();
	AfxMessageBox("Faild to connect!");
	exit(-1);
}
char rBuffer[1024];
long bytes_rcv;
//код пересылки
while ((bytes_rcv=recv(m_clsock1,rBuffer,1024,0))>0)
{
  if (send(m_clsock2,rBuffer,1024,0)<=0)
  {
	closesocket(m_clsock1);
	closesocket(m_clsock2);
	m_clsock1=INVALID_SOCKET;
	m_clsock2=INVALID_SOCKET;
	WSACleanup();
  	AfxMessage("Can't send data!!!");
	exit(-1);
  }
}
closesocket(m_clsock1);
closesocket(m_clsock2);
m_clsock1=INVALID_SOCKET;
m_clsock2=INVALID_SOCKET;
WSACleanup();
exit(0);
__________________
Дураки не динозавры - они не вымрут...
PSyton вне форума