当前位置:   article > 正文

c++实现socket以json格式传输图片_c++ tcpip 传送 json \

c++ tcpip 传送 json \

前天老师循序渐进的给了这个任务,具体任务内容如下,经过一天半的搜索拼凑调试,在各路csdn博主清晰明了的优秀文章的帮助下,最后总算是实现了,简单总结下。

任务内容

1.C++实现socket通信;2.socket传输数据要封装成json格式;3.json传输图片

具体实现

一、c++实现socket通信

1.1.1服务端步骤:

1、加载套接字库,创建套接字(WSAStartup()/socket());

2、绑定套接字到一个IP地址和一个端口上(bind());

3、将套接字设置为监听模式等待连接请求(listen());

4、请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());

5、用返回的套接字和客户端进行通信(send()/recv());

6、返回,等待另一个连接请求;

7、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup());

1.1.2方法详解:

1)加载Winsock库

  1. /**
  2. int WSAStartup(__in WORD wVersionRequested,__out  LPWSADATA lpWSAData);
  3. 此函数在应用程序中初始化winsockDLL,只有此函数调用成功后,应用程序才可以调用Windows SocketsDLL中的其他API函数,否则后面的任何函数都将调用失败
  4. wVersionRequested -- 调用程序使用windows socket的最高版本。 高字节指定小的版本号,低字节指定高的版本号。
  5. lpWSAData -- 指向WSADATA数据结构体指针,接收Windows Socket的实现细节。
  6. 返回值
  7. 如果成功,WSAStartup函数返下面列表显示的回0。否则,返之一回错误码。
  8. */
  9. WORD sockVersion = MAKEWORD(2, 2);
  10. WSADATA wsaData;
  11. if (WSAStartup(sockVersion, &wsaData) != 0)
  12. {
  13. return 0;
  14. }

2)创建套接字

  1. /**
  2. int socket (int domain, int type, int protocol)
  3. 初始化创建socket对象,成功时,返回非负数的socket描述符;失败是返回-1。
  4. domain -- 指明使用的协议族,协议族决定了socket的地址类型,在通信中必须采用对应的地址,AF_INET表示ipv4地址(32位的)与端口号(16位的)的组合
  5. type -- 指明socket类型,SOCK_STREAM表示TCP类型,保证数据顺序及可靠性;
  6. protocol -- 通常赋值"0",由系统自动选择。
  7. */
  8. SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  9. if (slisten == INVALID_SOCKET)
  10. {
  11. printf("socket error !");
  12. return 0;
  13. }

3)配置监听地址和端口并绑定

  1. /**
  2. int bind(int sockfd, const struct sockaddr* myaddr, socklen_t addrlen)
  3. 返回值:0 -- 成功,-1 -- 出错
  4. sockfd -- socket()函数返回的描述符
  5. myaddr -- 指明要绑定的本地IP和端口号,使用网络字节序
  6. addrlen -- 常被设置为sizeof(struct sockaddr)
  7. */
  8. sockaddr_in sin;
  9. sin.sin_family = AF_INET;// IP地址家族
  10. sin.sin_port = htons(8888);/
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/523000
推荐阅读
相关标签
  

闽ICP备14008679号