当前位置:   article > 正文

详细讲解如何使用Winsock实现网络通信——客户端_qt中利用winsock实现网络通信

qt中利用winsock实现网络通信
有了上一篇文章详细讲解如何使用Winsock实现网络通信——服务器端对服务器端的积累,实现客户端就很容易了,客户端和服务器端唯一的不同就是在调用socket函数建立套接字后不需要调用bind函数绑定地址,而是调用connect函数直接连接服务器。connect函数原型:
int connect(SOCKET s,const struct sockaddr FAR *name,int namelen);
s是套接字句柄
name指向sockaddr结构体指针,包含我们要连接的服务器端的地址信息。
namelen参数指向sockaddr结构的长度,可以用sizeof函数获得。
函数成功调用返回0,失败返回SOCKET_ERROR
具体的实现代码:
  1. #include "stdafx.h"
  2. #include <winsock2.h>
  3. #pragma comment(lib,"ws2_32")
  4. #include <stdio.h>
  5. int main(int argc, char* argv[])
  6. {
  7. WSADATA wsaData;
  8. WORD sockVersion = MAKEWORD(2, 2);
  9. //加载winsock库
  10. if(WSAStartup(sockVersion, &wsaData) != 0)
  11. return 0;
  12. // 创建套节字
  13. SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  14. if(sClient == INVALID_SOCKET)
  15. {
  16. printf("socket error\n");
  17. return 0;
  18. }
  19. // 在sockaddr_in结构中装入服务器端地址信息
  20. sockaddr_in servAddr;
  21. servAddr.sin_family = AF_INET;
  22. servAddr.sin_port = htons(4500);// htons函数 将主机的无符号短整形数转换成网络
  23. //字节顺序,4500端口为要连接服务器端的端口
  24. servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服务器端ip
  25. //连接服务器端
  26. if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)
  27. {
  28. printf("connect error\n");
  29. closesocket(sClient);
  30. return 0;
  31. }
  32. char *buff="\r\nzy_dreamer client coming...\r\n";
  33. //发送数据
  34. send(sClient,buff,strlen(buff),0);
  35. char revData[255];
  36. //直到收到有效数据时才打印出来
  37. int ret=recv(sClient,revData,255,0);
  38. if(ret>0)
  39. {
  40. //为了防止打印出错,把字符串结尾设成0x00
  41. revData[ret]=0x00;
  42. printf(revData);
  43. }
  44. closesocket(sClient);
  45. WSACleanup();
  46. return 0;
  47. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/147028
推荐阅读
相关标签
  

闽ICP备14008679号