Window API socket连接 client

本文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;
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值