Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #include "UDPSocket.h"
  2. #include <stdio.h>
  3.  
  4. int UDPSocket::initialize(unsigned short port_, const char* ipAddr_)
  5. {
  6. int iResult;
  7. //----------------------
  8. // Initialize Winsock
  9. iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
  10. if (iResult != NO_ERROR) {
  11. printf("WSAStartup failed with error: %d\n", iResult);
  12. return 1;
  13. }
  14.  
  15. //---------------------------------------------
  16. // Create a socket for sending data
  17. msocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  18. if (msocket == INVALID_SOCKET) {
  19. printf("socket failed with error: %ld\n", WSAGetLastError());
  20. WSACleanup();
  21. return 1;
  22. }
  23.  
  24. // Set up the RecvAddr structure with the IP address of
  25. // the receiver (in this example case "192.168.1.1")
  26. // and the specified port number.
  27. recvAddr.sin_family = AF_INET;
  28. recvAddr.sin_port = htons(port_);
  29. recvAddr.sin_addr.s_addr = inet_addr(ipAddr_);
  30.  
  31. return 0;
  32. }
  33.  
  34. int UDPSocket::send(const char* buff, int len)
  35. {
  36. int iResult = sendto(msocket,
  37. buff, len, 0, (SOCKADDR *) & recvAddr, sizeof(recvAddr));
  38. if (iResult == SOCKET_ERROR) {
  39. printf("sendto failed with error: %d\n", WSAGetLastError());
  40. return 1;
  41. }
  42. return 0;
  43. }
  44.  
  45. int UDPSocket::recv(char* buff, int len)
  46. {
  47. if (isBind == 0) {
  48. if (recv_bind() == 1)
  49. return 1;
  50. isBind = 1;
  51. }
  52. int SenderAddrSize = sizeof (senderAddr);
  53. int iResult;
  54. iResult = recvfrom(msocket,
  55. buff, len, 0, (SOCKADDR *) & senderAddr, &SenderAddrSize);
  56. if (iResult == SOCKET_ERROR) {
  57. printf("recvfrom failed with error %d\n", WSAGetLastError());
  58. return 1;
  59. }
  60. return 0;
  61. }
  62.  
  63. int UDPSocket::close()
  64. {
  65. int iResult = closesocket(msocket);
  66. if (iResult == SOCKET_ERROR) {
  67. printf("closesocket failed with error: %d\n", WSAGetLastError());
  68. WSACleanup();
  69. return 1;
  70. }
  71. WSACleanup();
  72. return 0;
  73. }
  74.  
  75. int UDPSocket::recv_bind()
  76. {
  77. int iResult = bind(msocket, (SOCKADDR *) & recvAddr, sizeof (recvAddr));
  78. if (iResult != 0) {
  79. printf("bind failed with error %d\n", WSAGetLastError());
  80. return 1;
  81. }
  82. return 0;
  83. }
  84.  
  85. void pack_frame(int* num, const char* buff, int len, char* frame)
  86. {
  87. std::memcpy(frame, num, sizeof(int));
  88. std::memcpy(frame + sizeof(int), buff, len + 1);
  89. }
  90.  
  91. void unpack_frame(int* num, char* buff, char* frame, int size)
  92. {
  93. std::memcpy(num, frame, sizeof(int));
  94. std::memcpy(buff, frame + sizeof(int), size - sizeof(int));
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement