服务端:
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
using namespace std;
class server
{
public:
WSADATA wsaData;
SOCKET sockServer;
SOCKADDR_IN addrServer;
SOCKET sockClient;
SOCKADDR_IN addrClient;
server();
void send();
void recv();
};
server::server()
{
if (WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
cout << "WSAStartup failed!" << endl;
return;
}
//创建套接字
sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(INVALID_SOCKET == sockServer)
{
cout << "socket failed!" << endl;
WSACleanup();//释放套接字资源;
return;
}
//服务器套接字地址
addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示任何IP
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(5999);//绑定端口6000
::bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
//Listen监听端
listen(sockServer,5);//5为等待连接数目
int len=sizeof(SOCKADDR);
cout<<"监听中..."<
cout<<"已监听到"<
}
void server::send()
{
char sendBuf[100];
for (;;)
{
sendBuf[0]='\0';
cin>>sendBuf;
if (sendBuf[0]!='\0')
{
::send(sockClient,sendBuf,100,0);
}
}
}
void server::recv()
{
char recvBuf[100];
for (;;)
{
recvBuf[0]='\0';
::recv(sockClient,recvBuf,100,0);
if (recvBuf[0]!='\0')
{
cout<<"客户端:"<
}
}
int _tmain(int argc, _TCHAR* argv[])
{
server sock;
thread tsend(&server::send,sock);
thread trecv(&server::recv,sock);
tsend.join();
trecv.join();
system("pause");
return 0;
}
客户端:
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#include
#include
#include
using namespace std;
class client
{
public:
WSADATA wsaData;
SOCKET sockClient;//客户端Socket
SOCKADDR_IN addrServer;//服务端地址
client(const string &ip);
void send();
void recv();
};
client::client(const string &ip)
{
WSAStartup(MAKEWORD(2,2),&wsaData);
//新建客户端socket
sockClient=socket(AF_INET,SOCK_STREAM,0);
//定义要连接的服务端地址
addrServer.sin_addr.S_un.S_addr=inet_addr(ip.c_str());//目标IP(127.0.0.1是回送地址)
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(5999);//连接端口6000
//连接到服务端
connect(sockClient,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
}
void client::send()
{
char sendBuf[100];
for (;;)
{
sendBuf[0]='\0';
cin>>sendBuf;
if (sendBuf[0]!='\0')
{
::send(sockClient,sendBuf,100,0);
}
}
}
void client::recv()
{
char recvBuf[100];
for (;;)
{
recvBuf[0]='\0';
::recv(sockClient,recvBuf,100,0);
if (recvBuf[0]!='\0')
{
cout<<"服务端:"<
}
}
int _tmain(int argc, _TCHAR* argv[])
{
string ip;
cout<<"请输入服务端ip:";
cin>>ip;
client c(ip);
thread tsend(&client::send,c);
thread trecv(&client::recv,c);
tsend.join();
trecv.join();
system("pause");
return 0;
}