Window API socket连接 client
来源:互联网 发布:java微信发送消息源码 编辑:程序博客网 时间:2024/04/30 02:42
本文socket client 与 server 同一端口通信
client端口的代码
#include <windows.h>/**** Function: SOCKET连接请求函数* para:* para:* Return:**/bool SocketConnect(QString serverip, int sendport){ PosLog.log->info("enter SocketConnect"); WSADATA wsaData; SOCKADDR_IN server_addr;/* windows处理相关 */ WORD wVersion; wVersion = MAKEWORD(2,2); WSAStartup(wVersion,&wsaData);/* 配置TCP/IP协议 */ server_addr.sin_addr.s_addr = inet_addr(serverip.toUtf8().data()); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(sendport);/* 连接server */ if( (sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) { PosLog.log->info("Socket Connect INVALID"); return false; } if(connect(sock, (struct sockaddr *)&server_addr, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) { PosLog.log->info("Socket Connect ERROR"); return false; } else { PosLog.log->info("Socket Connect Success"); return true; }}/**** Function: SOCKET发送数据* para:* para:* Return:**/bool SendSocketData(QString inPutMsg , QString& outPutMsg){ int res = 0; char msg[1024*20] = {'\0'};/* 发送数据 */ if(send(sock, inPutMsg.toUtf8().data(), inPutMsg.length(), 0) == SOCKET_ERROR) { return false; } else { /* 设置socket超时断开 */int recvTimeout = 10 * 1000; //10s超时setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&recvTimeout ,sizeof(int)); /* 接收服务器返回数据 */ if((res = recv(sock, msg, 1024*20, 0)) == -1) { PosLog.log->info("fail to receive data from server"); } else { outPutMsg = QString::fromUtf8(msg); //PosLog.log->info("outPutMsg:"+outPutMsg); memset(msg, '\0', sizeof(msg)); } } return true;}
阅读全文