네트워크 프로그래밍의 간단한 네트워크 통신

4064 단어
컨트롤러 기반의 간단한 네트워크 프로그래밍 코드.
서버 코드:
// 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; }

좋은 웹페이지 즐겨찾기