네트워크 프로그래밍의 간단한 네트워크 통신
서버 코드:
// Sever.cpp : 。
//
#include "stdafx.h"
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsadata;
// Socket , WSADATA , windows sockets
// WSAStartup , Socket Socket , Socket
// Socket Socket 。
// DLL WSAStartup() , windows Socket API 。
// Windows Socket DLL , DLL WSAClearup() Windows Socket DLL 。
WSAStartup(0x0202,&wsadata);
// , TCP/IP , AF_INET
// , SOCKT_STREAM
// 。 。 internet ,
// 0,
SOCKET ListenSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//struct sockaddr , , , bind(),connect()
// ;struct sockaddr_in in internet, 。
sockaddr_in ListenAddr;
memset(&ListenAddr,0,sizeof(sockaddr_in));
//sin_family , socket AF_INET
ListenAddr.sin_family=AF_INET;
//sin_port
ListenAddr.sin_port=htons(7070);
//sin_addr IP , in_addr
ListenAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
//bind
// int bind(SCOKET socket,const struct sockaddr* address,socklen_t address_len);
bind(ListenSocket,(sockaddr *)&ListenAddr,sizeof(sockaddr));
//listen , , 。
// TCP listen ,
listen(ListenSocket,5);
SOCKET ClientSocket=0;
sockaddr_in ClientAddr;
int ClientAddrLeng;
printf(" !
");
REACCEPT:
ClientSocket=0;
ClientAddrLeng=sizeof(sockaddr_in);
memset(&ClientAddr,0,sizeof(sockaddr_in));
// , ,accept 。
// , ,
ClientSocket=accept(ListenSocket,(sockaddr *)&ClientAddr,&ClientAddrLeng);
if(ClientSocket==INVALID_SOCKET)
{
printf(" , !
");
closesocket(ClientSocket);
goto REACCEPT;
}
else
{
printf("[%d] !
",ClientSocket);
}
char Buffer[999];
int RecvNum=0;
while(1)
{
// recv TCP
//
// , recv
// buf
// 0
RecvNum=recv(ClientSocket,Buffer,999,0);
if((RecvNum==0)||(RecvNum==SOCKET_ERROR))
{
printf("[%d] !
",ClientSocket);
break;
}
else
{
printf("%s
",Buffer);
// send TCP
// send , send
send(ClientSocket,Buffer,RecvNum,0);
}
}
closesocket(ClientSocket);
closesocket(ListenSocket);
WSACleanup();
return 0;
}
클라이언트 코드:
// Cllient.cpp : 。
//
#include "stdafx.h"
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsadata;
WSAStartup(0x0202,&wsadata);
SOCKET SeverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in SeverAddr;
memset(&SeverAddr,0,sizeof(sockaddr_in));
SeverAddr.sin_family=AF_INET;
SeverAddr.sin_port=htons(7070);
SeverAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
int r=connect(SeverSocket,(sockaddr *)&SeverAddr,sizeof(sockaddr));
if(r==0)
{
printf(" !
");
}
else
{
printf(" !
");
goto EXIT;
}
char Buffer[999];
int RecvNum=0;
while(1)
{
scanf("%s",Buffer);
if(strcmp(Buffer,"x")==0)
{
break;
}
send(SeverSocket,Buffer,strlen(Buffer)+1,0);
RecvNum=recv(SeverSocket,Buffer,999,0);
if((RecvNum==0)||(RecvNum==SOCKET_ERROR))
{
printf("
");
break;
}
else
{
printf("%s
",Buffer);
}
}
EXIT:
closesocket(SeverSocket);
WSACleanup();
getchar();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.