qt中使用socket,
首先要包含windows.h头文件
还要在pro文件中,增加:LIBS += -lpthread libwsock32 libws2_32 引入相关函数的库
TCP 稳定传输
服务器端:
0、在使用socket的之前,要调用WSAStartup函数,不然会导致后面的连接失败;
1、首先需要socket的创建 使用socket函数初始化;
2、创建SOCKADDR_IN服务器端结构体,初始化;
3、绑定服务器地址,使用bind函数;
4、设置服务器监听,使用listen函数;
5、创建SOCKADDR_IN客户端结构体,并使用accept函数和服务器相关联;
6、accept接收成功信号后,使用send、recv函数编写收发逻辑;
7、退出时调用closesocket函数,销毁socket;
示例代码:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
cout<<"failed to load winsock"<<endl;
}
SOCKET socketSer;
socketSer = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSer;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(8000);//自定义端口
addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//此demo使用本机做测试
bind(socketSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));
listen(socketSer,5);
SOCKADDR_IN addrClic;
SOCKET sockAccept;
int len = sizeof(SOCKADDR);
sockAccept = accept(socketSer,(SOCKADDR*)&addrClic,&len);
if(sockAccept == INVALID_SOCKET)
{
cout<<"accept client fail"<<endl;
return 0 ;
}
else
{
cout<<"accept client success!"<<endl;
}
char sendbuff[1024];
char recvbuff[1024];
while(true)
{
cout<<"ser:";
cin>>sendbuff;
if(strcmp(sendbuff,"q") == 0)
{
break;
}
send(sockAccept,sendbuff,strlen(sendbuff) + 1,0);
recv(sockAccept,recvbuff,1024,0);
cout<<recvbuff<<endl;
}
closesocket(socketSer);
return 0;
}
客户端:
0、同样需要调用WSAStartup函数;
1、创建客户端socket,并初始化;
2、创建SOCKADDR_IN服务器端结构体,初始化;
3、将客户端socket与服务器端相连接,使用connect函数;
4、接收connect成功的返回值后,利用send、recv函数编写收发逻辑;
5、退出时调用closesocket函数。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
WSADATA wsaData;
if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
cout<<"failed to load winsock"<<endl;
}
SOCKET socketClient;
socketClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSer;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(8000);
addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int ret = connect(socketClient,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));
if(ret != 0)
{
cout<<"connect server fail"<<endl;
return 0;
}
else
{
cout<<"connect server success"<<endl;
}
char sendBuff[1024];
char recvBuff[1024];
while(true)
{
recv(socketClient,recvBuff,1024,0);
cout<<"ser:"<<recvBuff<<endl;
cout<<"cli:";
cin>>sendBuff;
if(strcmp(sendBuff,"q") == 0)
{
break;
}
send(socketClient,sendBuff,strlen(sendBuff) + 1,0);
}
closesocket(socketClient);
return 0;
}