TCP server/Client Basic
TCP連線
Socket-Server:
1: #include <WinSock2.h> 2: #include <iostream>3: #pragma comment(lib,"wsock32.lib")
4: #define BUF_SIZE 64 5: 6: WSADATA wsd; 7: SOCKET sServer; 8: SOCKET sClient;9: int retVal;
10: char buf[BUF_SIZE];
11: 12: 13: SOCKADDR_IN addrServ; 14: 15: int main ()
16: { 17: 18: 19: //Initialize Server
20: if(WSAStartup(MAKEWORD(2,2), &wsd) != 0)
21: {22: std::cout << "WSAStartup failed!" << std::endl;
23: return 1;
24: } 25: 26: sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);27: if(INVALID_SOCKET ==sServer)
28: {29: std::cout << "Socket Fail"<<std::endl;
30: WSACleanup();31: return -1;
32: }33: //Bind The Socket
34: addrServ.sin_family = AF_INET; 35: addrServ.sin_port=htons(4999); 36: addrServ.sin_addr.s_addr = INADDR_ANY; 37: retVal = bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN)); 38: 39: if(SOCKET_ERROR == retVal)
40: {41: std::cout << "Bind Fail " << std::endl;
42: closesocket(sServer); 43: WSACleanup();44: return -1;
45: }46: //Listen
47: retVal =listen(sServer,1);48: if(SOCKET_ERROR == retVal)
49: {50: std::cout<< "Listen Fail" << std::endl;
51: closesocket(sServer); 52: WSACleanup();53: return -1;
54: }55: //Accept Client Connection
56: sockaddr_in addrClient;57: int addrClientlen = sizeof(addrClient);
58: sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen); 59: 60: if(INVALID_SOCKET == sClient)
61: {62: std::cout << "AcceptFAIL"<< std::endl;
63: closesocket(sServer); 64: WSACleanup();65: return -1;
66: }67: //Accept Date & print Data
68: ZeroMemory(buf,BUF_SIZE); 69: retVal = recv(sClient,buf,BUF_SIZE,0);70: if(SOCKET_ERROR == retVal)
71: {72: std ::cout << "Recv FAIL" << std::endl;
73: closesocket(sServer); 74: closesocket(sClient); 75: WSACleanup();76: return -1;
77: } 78: 79: std::cout << buf << std::endl;80: //Exit
81: closesocket(sServer); 82: closesocket(sClient); 83: WSACleanup();84: return 0;
85: }Socket-Client:
1: #include <WinSock2.h>
2: #include <iostream>
3: #pragma comment(lib,"wsock32.lib")
4: #define BUF_SIZE 64
5: 6: WSADATA wsd; 7: SOCKET sHost; 8: SOCKADDR_IN servAddr;9: char buf[BUF_SIZE];
10: int retVal;
11: 12: 13: 14: int main()
15: {16: //Initialize Socket DLL
17: if (WSAStartup(MAKEWORD(2,2),&wsd) != 0)
18: {19: std::cout << "WSAStartup" << std::endl;
20: return -1;
21: } 22: 23: sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);24: if(INVALID_SOCKET ==sHost)
25: {26: std::cout << "Socket Fail" << std::endl;
27: WSACleanup();28: return -1;
29: }30: //Connect Server
31: servAddr.sin_family = AF_INET;32: servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
33: servAddr.sin_port = htons((short)4999);
34: int nServAddlen = sizeof(servAddr);
35: 36: retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
37: if(SOCKET_ERROR == retVal)
38: {39: std::cout << "connect fail"<< std::endl;
40: closesocket(sHost); 41: WSACleanup();42: return -1;
43: }44: //Send Data
45: ZeroMemory(buf,BUF_SIZE); 46: 47: strcpy(buf,"MyTCP");
48: retVal = send(sHost,buf,strlen(buf),0);49: if(SOCKET_ERROR == retVal)
50: {51: std::cout <<"send fail" <<std::endl;
52: closesocket(sHost); 53: WSACleanup(); 54: }55: //Exit
56: closesocket(sHost); 57: WSACleanup(); 58: 59: return 0;
60: }建立成功即關閉連線。
建立TCP連線步驟
No comments:
Post a Comment