標籤:
windows Sockets 的版本:
標頭檔:WINSOCK.h
庫檔案:wsock32.lib
動態困:WINSOCK.DLL
標頭檔:WINSOCK2.h
庫檔案:WS2_32.lib
動態困:WS2_32.DLL
服務端:
WSADATAwsd;//WSADATA變數SOCKETsServer;//伺服器通訊端SOCKETsClient;//用戶端通訊端SOCKADDR_INaddrServ;;//伺服器位址charbuf[ BUF_SIZE];//接收資料緩衝區intretVal;//傳回值//初始化通訊端動態庫if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) {printf("WSAStartup Failed!!");AfxMessageBox("WSAStartup Failed");return 1;}//建立通訊端sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (INVALID_SOCKET == sServer) {printf("socket failed!\n");AfxMessageBox("socket failed!");WSACleanup();//釋放通訊端return -1;}//下一步 綁定通訊端//addrServ.sin_family = AF_INET;addrServ.sin_port = htons(4999);addrServ.sin_addr.s_addr = INADDR_ANY;//綁定通訊端retVal = bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));if (SOCKET_ERROR == retVal) {AfxMessageBox("bind failed!");closesocket(sServer); //關閉通訊端WSACleanup();//釋放通訊端資源return -1;}//開始監聽retVal = listen(sServer,1);if (SOCKET_ERROR == retVal) {AfxMessageBox("listen failed!");closesocket(sServer);WSACleanup();return -1;}//設定伺服器為監聽狀態,調用accept()函數等待用戶端的串連。該函數處於阻塞狀態,直到接受//了一個用戶端請求、當該函數返回的時候,建立一個通訊端,同時返回該用戶端的地址。如果調用//失敗,則關閉sockaddr_in addrClient;int addrClientlen = sizeof(addrClient);sClient = accept(sServer,(sockaddr FAR*)&addrClient, &addrClientlen);if (INVALID_SOCKET == sClient){AfxMessageBox("accept failed!");closesocket(sServer);WSACleanup();return -1;}//接受並顯示資料ZeroMemory(buf,BUF_SIZE);retVal = recv(sClient,buf,BUF_SIZE,0);if (SOCKET_ERROR == retVal){AfxMessageBox("recv Failed");closesocket(sServer);closesocket(sClient);WSACleanup();return -1;}CString str;str.Format("%s",buf);//AfxMessageBox(buf);m_Recv2.SetWindowText(str);closesocket(sServer);//關閉通訊端closesocket(sClient);//關閉通訊端WSACleanup();//釋放通訊端資源;
用戶端:
WSADATAwsd;//WSADATA變數SOCKETsHost;//伺服器通訊端SOCKADDR_INservAddr;//伺服器位址charbuf[BUF_SZIE];//接收資料緩衝區intretVal;//傳回值//初始化套結字動態庫if (WSAStartup(MAKEWORD(2,2), &wsd) != 0){printf("WSAStartup failed!\n");return -1;}//建立通訊端sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if(INVALID_SOCKET == sHost){printf("socket failed!\n");WSACleanup();//釋放通訊端資源return -1;}//設定伺服器位址servAddr.sin_family =AF_INET;servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");servAddr.sin_port = htons((short)4999);intnServAddlen = sizeof(servAddr);//串連伺服器retVal=connect(sHost,(LPSOCKADDR)&servAddr, sizeof(servAddr));if(SOCKET_ERROR == retVal){printf("connect failed!\n");closesocket(sHost);//關閉通訊端WSACleanup();//釋放通訊端資源return -1;}//向伺服器發送資料ZeroMemory(buf, BUF_SZIE);strcpy(buf, "MyTCP");retVal = send(sHost, buf, strlen(buf), 0);if (SOCKET_ERROR == retVal){printf("send failed!\n");closesocket(sHost);//關閉通訊端WSACleanup();//釋放通訊端資源return -1;}//退出closesocket(sHost);//關閉通訊端WSACleanup();//釋放通訊端資源return 0;
windows網路編程入門