Window API socket连接 client
2017-12-26 09:58
423 查看
本文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;
}
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;
}
相关文章推荐
- java|android 使用socket.io-client连接nodejs websocket
- android Socket连接【java.net包实现的socket连接client】
- [引]VS帮助文档的 socket连接的Listen和Connect 及 Tcp连接的TcpListener和TcpClient
- android Socket连接【java.net包实现的socket连接client】
- C API Socket 连接时间服务器,并修改自己系统的时间(对时)
- window多socket的连接
- delphi socket api client demo
- Appium python client 网络连接相关 api 用法
- 关于delphi下clientsocket的重复连接问题
- [引]VS帮助文档的 socket连接的Listen和Connect 及 Tcp连接的TcpListener和TcpClient
- 修补PHPRPC_Client中(JAVA版本),创建Socket连接时Timeout不起作用
- HttpClient 频繁创建连接,导致socket端口全部耗尽
- 【Window】Win32 API连接热点
- 如何屏蔽ClientSocket连接服务器失败出现的10061错误。
- 关于TcpClient,Socket连接超时的几种处理方法
- 4000 Appium python client 网络连接相关 api 用法
- Spring WebSocketStompClient connect连接时间的等待--CountDownLatch
- Android 使用Socket实现服务器与手机客户端的长连接三:clientA 发送给clientB,定点发送
- vc socket 多线程 (记录一次自己调用window 底层API编写 vc socket 多线程的服务器网络程序)
- EventStore .NET API Client在使用线程池线程同步写入Event导致EventStore连接中断的问题研究