歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Unix網絡編程chapter1 示例程序改寫為Winsock

Unix網絡編程chapter1 示例程序改寫為Winsock

日期:2017/3/1 10:08:58   编辑:Linux編程

Unix網絡編程chapter1 示例程序改寫為Winsock:

Sever端:

  1. #include"WinSock2.h"
  2. #include "time.h"
  3. #include "stdio.h"
  4. #include <iostream>
  5. #pragma comment(lib,"WS2_32")
  6. using namespace std;
  7. const int MaxLine = 1024;
  8. int main()
  9. {
  10. int lRet = 0;
  11. WSADATA lWsaData;
  12. if ((lRet = WSAStartup(MAKEWORD(2,2), &lWsaData)) != 0)
  13. {
  14. cout << "Error " << lRet << endl;
  15. return 0;
  16. }
  17. int lListen = 0, lConnfd = 0;
  18. SOCKADDR_IN lServAddr;
  19. char lBuf[MaxLine];
  20. time_t lTicks;
  21. lServAddr.sin_family = AF_INET;
  22. lServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  23. lServAddr.sin_port = htons(13);
  24. SOCKET lSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  25. if (INVALID_SOCKET == lSocket)
  26. {
  27. cout << "INVALID_SOCKET" << endl;
  28. return 0;
  29. }
  30. bind(lSocket,(sockaddr*)(&lServAddr),sizeof(lServAddr));
  31. listen(lSocket,5);
  32. while(true)
  33. {
  34. SOCKET lSeverSocket = accept(lSocket,(sockaddr*)NULL,NULL);
  35. lTicks = time(NULL);
  36. sprintf(lBuf, "%.24s\r\n", ctime(&lTicks));
  37. send(lSeverSocket,lBuf,strlen(lBuf),0);
  38. closesocket(lSeverSocket);
  39. }
  40. }

Client 端:

  1. #include<WinSock2.h>
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. #pragma comment(lib, "WS2_32")
  6. const int MaxLine = 1024;
  7. int main()
  8. {
  9. char lReadline[MaxLine];
  10. int lRet = 0;
  11. WSADATA lWsaData;
  12. if ((lRet = WSAStartup(MAKEWORD(2,2), &lWsaData)) != 0)
  13. {
  14. cout << "Error " << lRet << endl;
  15. return 0;
  16. }
  17. SOCKADDR_IN lAddr;
  18. lAddr.sin_family = AF_INET;
  19. lAddr.sin_port = htons(13);
  20. SOCKET lSocket = socket(AF_INET, SOCK_STREAM, 0);
  21. if (INVALID_SOCKET == lSocket)
  22. {
  23. cout << "INVALID_SOCKET" << endl;
  24. return 0;
  25. }
  26. lAddr.sin_addr.s_addr = inet_addr("192.168.1.102");
  27. if (connect(lSocket,(sockaddr*)(&lAddr),sizeof(lAddr)) < 0 )
  28. {
  29. cout << "connect error" << endl;
  30. return 0;
  31. }
  32. int lNum = 0;
  33. if ( (lNum = recv(lSocket,lReadline,MaxLine,0)) > 0)
  34. {
  35. string lStr(lReadline,lNum-1);
  36. cout << lStr << endl;
  37. }
  38. return 0;
  39. }

具體含義可以參考原書,Stevens大師已經事無巨細地把每行代碼都做了解釋,感覺很適合初���者學習。

對於網絡編程,我是初學者,在這裡想把書中的原理搞明白,把代碼自己敲成winsock下的,至少把代碼重新看一遍吧,呵呵。

Copyright © Linux教程網 All Rights Reserved